KeyShot MCP
KeyShot MCP lets an AI agent work on saved KeyShot scenes locally via headless scripting—inspect, adjust, preview, render, and save copies—without controlling the open KeyShot GUI.
Diagnose setup/status: executable, output access, presets, bridge files, and minimal KeyShot startup.
Inspect saved .bip scenes read-only: metadata, objects, cameras, materials, model sets, external references; list camera and material presets.
Render bounded previews as MCP image content, with an optional saved copy.
Run a full product workflow: import/open, assign materials, set camera/environment, save a scene copy, and render one or all cameras.
Apply library/material-file or preset materials to specific objects; edit scenes and save copies.
Create/update cameras via position/lookAt/distance/FOV/focal length or presets; set environment by name/path with brightness/rotation.
Sync the newest saved .bip from a file/folder, detect changes, copy safely, and optionally preview.
Render one view, selected cameras, all cameras, or a sequential multi-scene queue with quality presets, dimensions, samples, or time limits.
Import models and save prepared scenes without rendering.
Safety/limits: saved scenes only, no realtime GUI control; outputs default inside KEYSHOT_OUTPUT_DIR; no overwrite by default; processing is local.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@KeyShot MCPRender the scene product.bip with default settings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Saved scenes, not realtime GUI control. KeyShot MCP runs headless on the same computer as KeyShot. It does not read unsaved edits or control the open KeyShot window. 处理已保存的场景,不是实时 GUI 控制。 服务在本机后台运行 KeyShot,不能读取窗口中尚未保存的修改。
Client Agent and privacy. The Agent in your MCP client receives scene information and previews returned by tools. Depending on the client's implementation and settings, these results may be sent to its configured model provider. KeyShot MCP itself does not upload them. Review privacy and security before confidential work.
客户端 Agent 与隐私。 MCP 客户端中的 Agent 会接收工具返回的场景信息和预览; 这些内容可能根据客户端的实现与配置发送给其所选模型服务。KeyShot MCP 本身不主动上传这些内容。 保密项目请先阅读隐私与安全说明。
From a Request to a Render / 一句话到出图
After setup, describe the change to your Agent. It uses KeyShot MCP to perform the work on a saved scene copy; you review the preview before final output. 完成安装后,直接向 Agent 描述需求。它通过 KeyShot MCP 处理已保存场景的副本, 你看过预览、确认效果后,再正式出图。
“Change the lantern's metal to brushed steel, keep the glass unchanged, and show me a preview. Once I approve, export the image and a scene copy.”
“把灯具的金属换成拉丝钢,玻璃保持不变,先给我看预览。确认后输出图片和场景副本。”
Not happy with the preview? Ask for another adjustment before exporting. 预览不满意,可以继续说“再调整一下”;原始场景不覆盖,最终文件写入配置的输出目录。
Related MCP server: Local MCP for SketchUp
Product Demo / 产品实测
One selected object, two finishes. Both images were rendered in KeyShot 14.1 at 1440 × 1080, 64 samples, with the same camera and environment. The glass was explicitly corrected before the comparison; only the metal changed between images.
同一个对象,两种材质方案。 两张图采用相同相机、环境及 1440 × 1080、64 samples 参数,由 KeyShot 14.1 实测生成。先修正导入的玻璃,再仅替换金属对象,玻璃保持不变。
Model: Lantern 01 by Rajil Jose Macatangay, from Poly Haven, licensed under CC0. These are local KeyShot renders, not Poly Haven website previews. 模型来源、作者与 CC0 许可如上;展示图为本地渲染,不是网站官方预览图。
Reproduce the workflow / 复现演示 · Asset credits / 素材说明
English
What You Can Do
Prepare a product shot: import a model or open a scene, configure selected materials, camera and environment, save a copy and render in one KeyShot process.
Review before final output: return a PNG to the Agent for composition, material and lighting feedback. Design decisions stay with the user.
Continue from a save: detect saved
.bipchanges, copy the scene and preview it without reading the active GUI session.Render multiple views: discover all saved cameras, select particular cameras, or queue different scenes for sequential rendering.
Quick Start
Requirements: Node.js 20+, an MCP-compatible client, and a locally installed, licensed KeyShot edition with headless scripting. Windows 11 + KeyShot Studio 2025 / KeyShot 14.1 is tested. Other systems and KeyShot versions are not verified. KeyShot software, licenses and library assets are not included.
Version 0.13.5. This maintenance batch strengthens output protection, bounded previews, publication privacy, Windows installation paths and startup diagnostics. Installation examples below target this version. See the release validation record and 1.0 checklist. See Changelog and upgrade notes.
Ask Your Agent to Install
Send this to an Agent that can edit your client's MCP configuration:
Install KeyShot MCP 0.13.5 in my MCP client using npx -y keyshot-mcp@0.13.5.
Find the full path of my local keyshot_headless.exe and set KEYSHOT_HEADLESS_EXE.
Keep the default Documents/KeyShot MCP Outputs folder and external outputs disabled.
Use my client's configuration format, restart or reload it, and run keyshot_status.
Explain failed checks in plain language. Do not request or upload license keys.
Do not upload or publish my scenes or retained render files.
Before showing confidential scene metadata or previews to a model service, ask me first.Configure It Yourself
This is a generic mcpServers JSON example. Use your client's configuration format
and replace the executable path with the actual path on your computer.
{
"mcpServers": {
"keyshot": {
"command": "npx",
"args": ["-y", "keyshot-mcp@0.13.5"],
"env": {
"KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
}
}
}
}Restart the client, run keyshot_status, and check for ready: true. It verifies
the executable, output access, bridge, presets and a minimal KeyShot startup.
Global: run npm install -g keyshot-mcp@0.13.5, then use keyshot-mcp as the
client command with no npx arguments. Keep the same environment settings.
Source:
git clone https://github.com/truman-t3/keyshot-mcp.git
cd keyshot-mcp
pnpm install --frozen-lockfile
pnpm run buildUse node as the command and the absolute path to dist/index.js as its argument.
The checked-out source can be newer than npm. Client examples are in examples.
Workflows
Preview Before Rendering
Inspect C:\projects\speaker.bip and show a preview. Describe framing or material
problems, but wait for approval before editing or producing a final render.Recommended sequence: check status → inspect → preview → discuss → approve → render.
keyshot_preview_render embeds a PNG and deletes its temporary file after reading.
Provide outputPath only when a saved image is needed.
Make a Product Render
Import C:\models\speaker.obj, center it and place it on the ground. Use Isometric,
save a scene copy and show a preview first. If the framing clips the model, propose
a camera adjustment before rendering the approved scene at standard quality.keyshot_product_render accepts one model or one saved scene. New models use import
composition options by default; existing scenes keep their setup unless changes
are requested. On unreleased main, standard-view cameras for new models without
a base scene fit the world-space scene bounds to the render aspect ratio, with
10% edge padding. Explicit distance, absolute camera coordinates and base scenes
keep their framing. This includes all scene geometry, not just the main product;
review a preview before final rendering. Published 0.13.5 retains the earlier framing.
Compare Materials on One Object
Inspect the saved scene and list material presets. Identify the metal object,
change only that object to Brushed Steel in a scene copy, keep the glass unchanged,
and show a preview before final rendering.Use the returned objectPath when names repeat. Material names depend on the local
KeyShot library; do not invent them. See material rules.
Continue After Saving in KeyShot
I saved my scene in C:\projects\speaker. Sync the newest .bip in that folder,
show me a preview and do not overwrite the original.keyshot_sync_saved_scene accepts a file or one project folder. Reuse the previous
fingerprint on later calls; unchanged saves return changed: false without another
copy or render. It is explicit sync, not automatic background monitoring.
Render All Cameras
Render every saved camera in C:\scenes\speaker.bip at preview quality. Continue
if one camera fails, and do not overwrite existing images.For selected cameras use keyshot_batch_render; for different scenes use keyshot_render_queue.
Prepare a Model Without Rendering
Import C:\models\speaker.obj, center it, place it on the ground and adjust the
camera target and environment. Save a scene copy; do not render an image yet.Use keyshot_import_model when only a prepared .bip is needed.
Adjust the Lens and Environment
Set the Product Hero camera to a 55 mm focal length, rotate the current
environment to 45 degrees, save a scene copy and show a preview.Use keyshot_set_camera and keyshot_set_environment for focused changes.
Render Quality
Preset | Resolution | Samples | Typical Use |
| 960 × 540 | 16 | Composition and material checks |
| 1920 × 1080 | 64 | Default product-render quality |
| 3840 × 2160 | 256 | High-resolution output |
Explicit dimensions and samples override presets. maxTimeSeconds switches to
time-based rendering and cannot be combined with explicit samples.
fieldOfView and focalLength are mutually exclusive; camera position and
lookAt must be supplied together. A quality preset does not guarantee the final look.
Lower-level rendering tools keep their existing defaults when qualityPreset is omitted.
Tool Reference
Start with review and product rendering. The other tools provide focused control; full parameters come from the generated catalog.
Group | Tools |
Diagnose and review / 诊断与检查 |
|
Product workflow / 产品流程 |
|
Import and save / 导入与保存 |
|
Materials / 材质 |
|
Cameras / 相机 |
|
Environment / 环境 |
|
Rendering / 渲染 |
|
The server also provides a product-render MCP Prompt and a workflow MCP Resource. The bundled Agent Skill covers setup, diagnosis and safe tool selection. These are separate interfaces, not extra render tools.
Camera and Material Presets
The bundled camera presets are Front, Back, Left, Right, Top, Bottom and Isometric.
Custom camera JSON supports a standardView or absolute position, lookAt and
optional up. Both object and array formats are supported; see the preset files.
Material presets reference a local KeyShot library name or material file, not bundled
proprietary materials. The server only reads preset JSON; it does not edit it.
Use KEYSHOT_CAMERA_PRESETS and KEYSHOT_MATERIAL_PRESETS for custom files.
See material assignment and error guidance.
Configuration and Safety
Variable | Default | Purpose |
| Windows: | Full executable path or command on |
|
| Allowed output root |
|
| Explicitly allow trusted external output paths |
|
| Timeout per process, in milliseconds |
| bundled JSON | Custom camera presets |
| bundled JSON | Custom material references |
| empty | Optional launch arguments; diagnostics never echo values |
Inputs can come from any trusted local path. Output traversal and symlink/junction
escapes are rejected by default. Automatically named product outputs use -2,
-3, etc. on collision; explicit paths are not silently renamed. Writing tools reject
existing files by default. Set overwrite: true only to replace a distinct output
intentionally; it never permits replacing this request's input scene, model, material
or environment, including linked aliases. Preview and saved-scene sync never overwrite.
Keep scene and image destinations separate. Prefer scene copies.
KeyShot headless tasks run sequentially within each server instance to reduce
license and file conflicts; this does not coordinate separate MCP server processes.
Processing is local. When an Agent in your MCP client uses these tools, the client may send tool results, scene metadata and preview images to its selected model provider, depending on the client's implementation and settings. KeyShot MCP itself does not upload these results. Review privacy settings before confidential work. No license bypass or arbitrary Python execution is provided. See Security.
Questions and Support
Can it edit the open KeyShot window? No. Save the scene, then sync a copy. The experimental bridge kept Script Runner active and blocked interaction; the stable product does not ship it. Technical explanation.
Does newer MCP support mean ChatGPT Events or GUI support? No. The stable stdio
server supports 2026-07-28 and legacy 2025-11-25 clients. Authenticated remote
Events delivery is separate and not released. See upgrade notes.
What if setup, materials or rendering fail? Run keyshot_status, read its failed
checks and suggestions, verify local material names and try a small preview.
Do not treat a tool error as a completed change.
Installation and usage: Discussions.
Reproducible errors: Bug report.
Workflow requests: Feature request.
Vulnerabilities: Private reporting.
Read Support before sharing logs. Never post private scenes, customer models, credentials, license information or confidential renders publicly.
Development and Roadmap
See Contributing for setup and checks. CI covers Windows/Ubuntu
and Node.js 20/24; Linux CI does not establish KeyShot-on-Linux support.
The generated cube remains an automated smoke-test fixture. Run npm run smoke:keyshot
only with a supported, licensed local KeyShot installation.
Next priorities: real validation on more KeyShot releases and macOS, and further lens controls when stable headless APIs are available. GUI control requires a supported non-blocking integration, not a persistent blocking script.
License and Independence
Code is MIT-licensed. Third-party demo assets retain their own licenses. KeyShot is a trademark of KeyShot ApS and/or KeyShot Inc. This independent community project is not affiliated with, endorsed by or sponsored by KeyShot. Install and license KeyShot separately; do not redistribute its proprietary software or assets. Community conduct is covered by Code of Conduct.
中文
核心特点
把需求变成出图流程: 一个工具串联导入或打开场景、指定对象材质、相机、环境、保存副本和渲染。
先看预览再决定: PNG 直接返回给 Agent,用于讨论构图、材质与光线,不替代设计判断。
接着已保存的文件工作: 检测
.bip保存变化,同步副本,不读取 GUI 中未保存的编辑。一次输出多个视角: 自动读取全部相机,也能选择部分相机或顺序处理多个场景。
快速开始
需要 Node.js 20+、支持 MCP 的客户端,以及本机已安装并合法授权、支持 headless 脚本的 KeyShot。已实测 Windows 11 + KeyShot Studio 2025 / KeyShot 14.1;其他系统和 KeyShot 版本尚未实机验证。项目不包含 KeyShot、许可证或官方材质库。
本版为 0.13.5: 集中加固输出保护、预览大小限制、发布隐私、
Windows 安装路径和启动诊断。下方安装示例使用此版本。
验证记录与正式版准备见验收清单,
版本变更见更新记录和升级说明。
把安装交给 Agent
将下面这段话发给能够修改客户端 MCP 配置的 Agent:
请用 npx -y keyshot-mcp@0.13.5 将 KeyShot MCP 安装到我的 MCP 客户端。
找到本机 keyshot_headless.exe 的完整路径,设置 KEYSHOT_HEADLESS_EXE。
保留默认“文档/KeyShot MCP Outputs”输出目录,关闭外部输出。
按这个客户端实际支持的格式配置,重启或重新加载后运行 keyshot_status。
用普通设计师能理解的语言解释失败检查,不索取或上传许可证密钥。
不要上传或发布我的场景或保留的渲染文件。
如果要把保密场景的元数据或预览发送给模型服务,请先取得我的确认。手动配置
下面是通用 mcpServers JSON 示例,不代表所有客户端都原样使用此格式。
可执行文件路径需要换成本机实际路径。
{
"mcpServers": {
"keyshot": {
"command": "npx",
"args": ["-y", "keyshot-mcp@0.13.5"],
"env": {
"KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
}
}
}
}重启客户端,运行 keyshot_status,确认 ready: true。它检查可执行文件、输出目录
权限、bridge、预设以及最小 KeyShot 启动过程。
全局安装: 运行 npm install -g keyshot-mcp@0.13.5,客户端命令改成 keyshot-mcp,
不再填写 npx 参数;环境变量保持一致。
源码运行:
git clone https://github.com/truman-t3/keyshot-mcp.git
cd keyshot-mcp
pnpm install --frozen-lockfile
pnpm run build客户端命令使用 node,参数填写 dist/index.js 的绝对路径。
这会运行当前检出的源码,可能比 npm 已发布版本更新。示例位于 examples。
常用工作流
先预览,再正式出图
检查 C:\projects\speaker.bip,给我看预览,说明构图或材质问题。
先不要修改,也不要直接输出最终渲染,等我确认。推荐顺序:状态检查 → 场景检查 → 预览 → 讨论 → 确认 → 正式渲染。
keyshot_preview_render 返回 PNG 后清理临时文件;需要保留图片时才填写 outputPath。
一句话准备产品出图
导入 C:\models\speaker.obj,居中贴地,用 Isometric 视角,保存副本,先给我看预览。
如果画面裁切了模型,先提出相机调整建议;确认后再按标准质量渲染。keyshot_product_render 接受一个模型或一个已保存场景。新模型默认开启导入构图选项;
已有场景没有明确要求时保留原有设置。未发布的 main 中,不使用基础场景的新模型在
标准视角下会按世界坐标包围盒和输出宽高比调整取景,四边预留 10% 空间;显式距离、
绝对相机坐标和基础场景保留原有构图。包围盒包含场景全部几何体,不只主产品,正式出图
前仍需检查预览。已发布的 0.13.5 仍使用此前的取景逻辑。
只改一个对象的材质
检查场景并列出材质预设,找出金属对象,只把这个对象改为 Brushed Steel。
保持玻璃不变,保存副本,先展示预览,不要直接输出最终图。同名对象应使用检查结果中的 objectPath。材质名称以本机材质库为准,不凭空填写。
具体规则见材质应用说明。
从 KeyShot 最近一次保存继续
我已把场景保存在 C:\projects\speaker。同步这个文件夹里最新的 .bip,
给我看预览,不要覆盖原场景。keyshot_sync_saved_scene 接受文件或一个项目文件夹。再次调用时复用上次内容指纹;
没有新保存时返回 changed: false,不重复复制或渲染。它是显式同步,不是自动后台监控。
渲染全部相机
用预览质量渲染 C:\scenes\speaker.bip 中全部已保存相机。
某个相机失败时继续,不要覆盖已有图片。指定相机用 keyshot_batch_render;不同场景用 keyshot_render_queue。
只整理模型,不渲染
导入 C:\models\speaker.obj,居中贴地,调整相机观察点和环境。
保存场景副本,暂时不要渲染图片。只需要整理好的 .bip 时使用 keyshot_import_model。
调整镜头与环境
把 Product Hero 相机设为 55 mm 焦距,将当前环境旋转到 45 度,
保存场景副本并给我看预览。使用 keyshot_set_camera 和 keyshot_set_environment 分别调整相机与环境。
渲染质量
预设 | 分辨率 | 采样 | 常用场景 |
| 960 × 540 | 16 | 构图、材质检查 |
| 1920 × 1080 | 64 | 产品出图默认质量 |
| 3840 × 2160 | 256 | 高清输出 |
显式宽高和采样会覆盖预设值。maxTimeSeconds 改用限时渲染,不能与显式 samples
同时使用。fieldOfView 与 focalLength 互斥;position 与 lookAt 必须成对提供。
效果仍需检查,不能把质量预设理解为“保证最终效果”。
底层渲染工具未填写 qualityPreset 时,保留各自原有的默认行为。
工具参考
19 个工具按任务分组列在上方工具表,完整参数由代码自动生成在
工具目录。常用入口是 keyshot_status、keyshot_inspect_scene、
keyshot_preview_render、keyshot_sync_saved_scene 和 keyshot_product_render。
另有产品渲染 Prompt、工作流 Resource 和 Agent Skill。 它们用于指导流程,不是额外的渲染工具。无需记住全部名称,可直接描述设计需求。
相机与材质预设
内置七个相机视角:Front、Back、Left、Right、Top、Bottom 和 Isometric。
自定义相机 JSON 可填写 standardView,或绝对坐标 position、lookAt 与可选 up;
支持对象和数组格式,参见预设文件。
材质预设引用本机 KeyShot 材质库名称或材质文件,不附带专有材质资源。
服务只读取预设 JSON,不自动修改。自定义文件分别通过 KEYSHOT_CAMERA_PRESETS
和 KEYSHOT_MATERIAL_PRESETS 配置,材质规则及错误处理见材质应用说明。
配置与安全
环境变量 | 默认值 | 用途 |
| Windows: | 实际可执行文件路径,或 |
|
| 允许的输出根目录 |
|
| 显式允许可信的外部输出位置 |
|
| 单次进程超时,单位毫秒 |
| 内置 JSON | 自定义相机预设 |
| 内置 JSON | 自定义材质引用 |
| 空 | 可选启动参数,诊断不回显内容 |
输入可以来自任意可信本地路径。默认拒绝越界路径及软链接/目录联接逃逸。
产品工具自动命名的输出重名时使用 -2、-3 等编号,显式路径不被静默改名。
写入工具默认拒绝覆盖已有文件。只有确实要替换另一个输出文件时才设置
overwrite: true;即使开启,也不能覆盖本次调用的输入场景、模型、材质或环境文件,
包括指向它们的链接。预览与保存同步始终不覆盖。场景和图片必须使用不同路径,平时使用场景副本。
同一个服务实例内的 KeyShot 后台任务按顺序执行,以减少许可证和文件冲突;
多个独立 MCP 服务进程之间不共享这一排队机制。
处理在本机完成。MCP 客户端中的 Agent 使用工具时,返回的工具结果、场景元数据和 预览图可能根据客户端的实现与配置发送给所选模型服务。 KeyShot MCP 本身不主动上传 这些内容。保密项目请先核对隐私设置。项目不提供许可证绕过或任意 Python 执行。 更多说明见 SECURITY.md。
常见问题与支持
能控制正在打开的 KeyShot 窗口吗? 不能。先保存,再同步副本。实验 Bridge 会持续占用 Script Runner,阻挡正常操作,因此没有作为稳定功能发布。 完整原因见 GUI 能力边界。
支持新 MCP 协议,就能用 ChatGPT Events 或实时控制吗? 不能这样推断。
稳定 stdio 服务支持 2026-07-28 和旧 2025-11-25 客户端;远程鉴权与事件投递属于
尚未发布的独立集成,详见升级说明。
安装、材质或渲染失败怎么办? 先运行 keyshot_status,查看失败检查和建议,
核对本机材质名称,再尝试小尺寸预览。不要把报错当成已经完成修改。
使用与安装:Discussions。
可复现错误:Bug 报告。
工作流建议:功能建议。
安全漏洞:私密报告。
分享日志前请阅读 SUPPORT.md,不要公开客户模型、私有场景、凭据、许可证或保密渲染图。
开发与路线图
环境准备与完整测试命令见贡献指南。CI 覆盖 Windows/Ubuntu 和
Node.js 20/24;Linux CI 不代表 KeyShot 已在 Linux 上实机可用。原有立方体保留为
自动 smoke test 夹具,npm run smoke:keyshot 只在已安装并合法授权 KeyShot 的机器运行。
后续重点:更多 KeyShot 版本和 macOS 实机验证,以及稳定 headless API 可用时的镜头 控制。实时 GUI 需要受支持的非阻塞接入方式,不采用长期阻挡窗口的脚本。
许可与非官方说明
代码采用 MIT License,第三方演示资产保留自己的许可。KeyShot 是 KeyShot ApS 和/或 KeyShot Inc. 的商标。本项目是独立开源社区项目,与官方无隶属、 认可或赞助关系。用户需单独安装并合法授权 KeyShot,不重新分发其专有软件或素材。 社区协作遵循行为准则。
Available Tools
19 toolskeyshot_apply_camera_presetApply a camera presetBDestructive
Create or update a saved camera from a configured standard-view or absolute camera preset, then save the edited scene.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| cameraName | No | Optional saved camera name. Defaults to the preset name. | |
| presetName | Yes | Case-insensitive camera preset name returned by keyshot_list_camera_presets. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and non-idempotent, and the description partially supports this by disclosing that the edited scene is saved as a side effect. It does not, however, say what the destructive aspect is, whether the input scene is touched, or that re-applying is not idempotent — the schema's overwrite note is doing that work.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the write-and-save side effect front-loaded alongside the action. No filler, no repetition of schema detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the schema documents parameters thoroughly, so the remaining burden is behavioral: whether unsaved scene changes are discarded, and how this fits the list-presets workflow. Those are absent, which matters for a tool flagged destructive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already fully documented, including overwrite semantics, path constraints, and the cameraName default. The description only adds the notion of 'standard-view or absolute' preset types, which is minor added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: create or update a saved camera from a preset, then save the scene. The 'from a preset' qualifier distinguishes it from the plain keyshot_set_camera sibling, though that distinction is left implicit rather than named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not, or alternative is given. An agent must infer from the name that this is the preset-driven path versus keyshot_set_camera or the list/inspect workflow; neither the preset-listing prerequisite nor the choice against siblings appears in the description.
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 materialBDestructive
Apply a KeyShot library material or local material file to a specific object, then save the edited scene.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| objectName | No | Scene object name to modify. Provide either objectName or the more specific objectPath. | |
| objectPath | No | Full scene-tree path of the object to modify. Use this instead of objectName when names are duplicated. | |
| materialName | No | Material name from the local KeyShot library. Provide either materialName or materialPath. | |
| materialPath | No | Absolute path to a native single-material KeyShot MTL file, not a Wavefront OBJ companion MTL. Provide either materialPath or materialName. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false; the description adds the key behavioral fact that the call does not just mutate but also writes a saved scene, which explains the destructive flag. It stops short of saying whether the input scene file is left untouched (the schema says so, the description does not) or how overwrite conflicts are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action, names both material sources, identifies the target, and closes with the write side effect. No filler and nothing an agent must read past to find the core behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and an output schema, the description only needs to carry the action and side effect, which it does. The remaining gap is routing: for a tool sitting next to keyshot_apply_material_preset, an agent gets no help choosing between them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the either/or pairings (materialName vs materialPath, objectName vs objectPath) and the overwrite semantics are already fully documented in the schema. The description only says a material may come from a library or a local file, which restates rather than extends the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Apply a KeyShot library material or local material file to a specific object") plus the resulting side effect ("then save the edited scene"). It distinguishes library/local-file materials from presets implicitly, but never names keyshot_apply_material_preset, so the differentiation from that closest sibling is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and keyshot_apply_material_preset (the obvious alternative for preset-based material application) is never mentioned. The only usage signal is the implicit framing that this operates on an existing scene file and an existing object.
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 presetBDestructive
Resolve a configured material preset, apply it to one scene object, and save a new scene.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| objectName | No | Scene object name to modify. Provide either objectName or objectPath. | |
| objectPath | No | Full scene-tree path to modify. Prefer this when object names are duplicated. | |
| presetName | Yes | Case-insensitive material preset name returned by keyshot_list_material_presets. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false. The description's 'save a new scene' adds useful context that the source scene is written to a separate output rather than mutated in place, but it does not disclose the overwrite hazard on the destination, permission/auth requirements, or what happens when preset resolution fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence covering all three phases of the operation with zero filler. Nothing repeats the tool name or title verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich 6-parameter schema, full description coverage, an output schema, and annotations carrying the safety profile, minimal prose is defensible. Still, for a destructive multi-step operation the description omits any mention that the input scene is never replaced and that an existing output requires overwrite=true, both of which are decision-relevant for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains objectName vs objectPath, the overwrite semantics, and the output-directory constraint. The description contributes nothing about parameters beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete three-step verb chain: resolve a configured preset, apply it to one scene object, save a new scene. That is specific and distinguishes it implicitly from keyshot_apply_material (raw material) and keyshot_apply_camera_preset, but it never names those siblings, so an agent must infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to choose this over keyshot_apply_material or keyshot_apply_camera_preset, and no prerequisites (such as needing a preset name from keyshot_list_material_presets, which only appears in the schema). Usage is implied by the verb chain 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_batch_renderRender selected camerasBDestructive
Render an explicit list of saved cameras from one scene into an output directory.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Render width in pixels. Overrides the selected quality preset when provided. | |
| format | No | Output image format. Defaults to PNG when omitted. | |
| height | No | Render height in pixels. Overrides the selected quality preset when provided. | |
| cameras | Yes | Saved camera names to render in order. Use keyshot_list_cameras first when names are unknown. | |
| samples | No | Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided. | |
| outputDir | Yes | Directory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default. | |
| overwrite | No | Whether existing image files may be replaced. Defaults to false. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| qualityPreset | No | Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples). | |
| maxTimeSeconds | No | Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 KeyShotADestructive
Import a supported local model into an empty or base scene, apply requested composition options, and save a new scene.
| Name | Required | Description | Default |
|---|---|---|---|
| modelPath | Yes | Absolute path to a model file supported by KeyShot, such as OBJ, FBX, STL, or glTF. | |
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| snapToGround | No | Ask KeyShot to place imported geometry on the ground plane when supported. | |
| baseScenePath | No | Optional existing KeyShot scene to use as the import base. Omit to start from an empty scene. | |
| centerGeometry | No | Ask KeyShot to center imported geometry during import when supported. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. | |
| adjustEnvironment | No | Ask KeyShot to adjust the environment to the imported geometry when supported. | |
| adjustCameraLookAt | No | Ask KeyShot to retarget the active camera to the imported geometry when supported. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false; the description adds that a new scene is written, reinforcing the write outcome. However, it does not warn about overwriting an existing output file or about the KEYSHOT_OUTPUT_DIR containment rule, both of which affect whether a call is safe. The description does not contradict the annotations, but it adds only modest context to a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and sequences the outcome in the order the agent cares about. No filler and no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations, a fully documented 8-parameter schema, and an output schema, the remaining burden on the description is low. It covers the import-to-save flow but omits what the returned scene contains and any failure behavior for unsupported formats. The environment is well specified, so it is sufficient for calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters are already documented, including overwrite rules and output path constraints. The description's 'apply requested composition options' only gestures vaguely at the boolean flags (snapToGround, centerGeometry, adjustEnvironment, adjustCameraLookAt) without adding meaning. This meets the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Import a supported local model') plus the three-stage outcome: base scene, composition options, save a new scene. This separates it from keyshot_save_scene, which saves without import. It stops short of naming a sibling, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'into an empty or base scene' implies the preparation context, but there is no explicit when-to-use or when-not-to-use guidance. Nothing tells the agent how this differs from keyshot_sync_saved_scene or keyshot_save_scene in a workflow. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyshot_inspect_sceneInspect a KeyShot sceneBRead-onlyIdempotent
Open a scene read-only and return metadata, objects, cameras, material assignments, model sets, and external references.
| Name | Required | Description | Default |
|---|---|---|---|
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 presetsARead-onlyIdempotent
Read the configured camera preset JSON and return valid standard or absolute camera presets without opening KeyShot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 camerasARead-onlyIdempotent
Return saved camera names without saving changes. Use this before selected-camera rendering when names are unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 presetsARead-onlyIdempotent
Read the configured local material preset JSON and return valid preset names and material sources without opening KeyShot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 previewARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Preview width in pixels. Defaults to 960; allowed range is 64 to 1920. | |
| camera | No | Optional saved camera name to activate for the preview. Omit to use the scene's active camera. | |
| height | No | Preview height in pixels. Defaults to 540; allowed range is 64 to 1080. | |
| samples | No | Preview render samples. Defaults to 16 unless maxTimeSeconds is provided; maximum is 64. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| outputPath | No | Optional .png destination inside KEYSHOT_OUTPUT_DIR. Existing files are never overwritten. When omitted, a temporary preview is embedded and deleted. | |
| maxTimeSeconds | No | Time-based preview limit in seconds. Replaces the default sample mode and cannot be combined with an explicit samples value; maximum is 60. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 productADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| up | No | Optional camera up direction [x, y, z]. Requires position and lookAt. | |
| width | No | Render width in pixels. Overrides the selected quality preset when provided. | |
| format | No | Output image format. Defaults to PNG when omitted. | |
| height | No | Render height in pixels. Overrides the selected quality preset when provided. | |
| lookAt | No | Camera target [x, y, z]. Must be provided together with position. | |
| samples | No | Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided. | |
| distance | No | Positive KeyShot camera distance applied after the transform or preset. | |
| position | No | Camera position [x, y, z]. Must be provided together with lookAt. | |
| rotation | No | Environment rotation in degrees, from 0 inclusive to 360 exclusive. | |
| modelPath | No | Absolute path to a model to import. Provide exactly one modelPath or scenePath. | |
| outputDir | No | All-cameras output directory. Invalid with single mode; a safe directory is generated when omitted. | |
| overwrite | No | Allow replacement of explicitly selected output files. Defaults to false. | |
| scenePath | No | Absolute path to an existing KeyShot scene. Provide exactly one scenePath or modelPath. | |
| brightness | No | Positive brightness multiplier for the active environment. | |
| cameraName | No | Camera to create, update, or activate. New model workflows default to Product Hero. | |
| outputPath | No | Single-mode image destination. Invalid with allCameras mode; a safe name is generated when omitted. | |
| renderMode | No | Render one active or named camera, or discover and render every saved camera. Defaults to single. | single |
| fieldOfView | No | Camera field of view in degrees, greater than 0 and less than 180. Cannot be combined with focalLength. | |
| focalLength | No | Camera focal length from 5 to 200 mm. Cannot be combined with fieldOfView. | |
| snapToGround | No | Place imported geometry on the ground. Applies only to modelPath sources and defaults to true for new models. | |
| baseScenePath | No | Optional KeyShot base scene used only when modelPath is provided. | |
| qualityPreset | No | Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples). | |
| centerGeometry | No | Center imported geometry. Applies only to modelPath sources and defaults to true for new models. | |
| maxTimeSeconds | No | Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples. | |
| continueOnError | No | In allCameras mode, continue after one camera fails. Defaults to true. | |
| environmentName | No | Environment name from the KeyShot library. Cannot be combined with environmentPath. | |
| environmentPath | No | Absolute path to a local KeyShot environment file. Cannot be combined with environmentName. | |
| outputScenePath | No | Destination for the prepared scene. A safe numbered name is generated when omitted. | |
| cameraPresetName | No | Configured camera preset to apply. Cannot be combined with a custom position/lookAt pair. | |
| adjustEnvironment | No | Adjust the environment after model import. Applies only to modelPath sources and defaults to true for new models. | |
| adjustCameraLookAt | No | Retarget the camera after model import. Applies only to modelPath sources and defaults to true for new models. | |
| materialAssignments | No | Object-specific material changes applied before camera and environment setup. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=false, lowering the bar. The description adds that the run is headless and that a scene copy is saved, but it does not disclose what the destructive behavior actually overwrites despite the 'overwrite' option – a notable gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that enumerates the workflow stages in order and wastes nothing. Given the complexity of 32 parameters, this is admirably tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema fully covers the 32 parameters. The description adequately conveys the workflow scope, though it could say more about when this tool supersedes the granular siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 32 parameters, including enums and cross-parameter constraints. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific composite verb set (open/import, assign materials, configure camera and environment, save, render) and the resource (a product workflow). It clearly positions itself as the one-shot orchestrator versus the granular siblings, though it never explicitly states that contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in one headless process' implies batch/automated usage and contrasts implicitly with calling the individual sibling tools, but there is no explicit when-to-use / when-not-to-use guidance or named alternative. Usage is only inferable.
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 viewCDestructive
Render the active or a named camera from an existing scene to an image file.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Render width in pixels. Overrides the selected quality preset when provided. | |
| camera | No | Optional saved camera name to activate before rendering. Omit to use the scene's active camera. | |
| format | No | Output image format. Defaults to PNG when omitted. | |
| height | No | Render height in pixels. Overrides the selected quality preset when provided. | |
| samples | No | Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided. | |
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| outputPath | No | Destination image path. When omitted, a PNG name is generated inside KEYSHOT_OUTPUT_DIR. | |
| qualityPreset | No | Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples). | |
| maxTimeSeconds | No | Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent writes, so the description should add file-safety context, but it says nothing about how output paths are resolved, that existing files require overwrite, or that a scene is opened as a side effect. It only restates that an image file is produced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though arguably under-specified for a ten-parameter destructive tool rather than genuinely complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the parameter schema is fully documented, so the essentials for calling are present. However, for a destructive, non-idempotent render with interacting options, one sentence leaves the mutation and file-overwrite behavior entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself explains presets, enum formats, the samples vs maxTimeSeconds conflict, and overwrite rules. The description adds no parameter meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (render) and resource (camera/view of a scene) plus the output (image file). It implies a single-view render, which distinguishes it softly from keyshot_render_all_cameras and keyshot_batch_render, but 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of keyshot_preview_render, keyshot_product_render, keyshot_batch_render, or keyshot_render_queue. The agent must infer the choice purely from the name and the one-line description.
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 camerasADestructive
Discover every saved camera and render each view in one headless process with collision-safe file names and per-camera results.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Render width in pixels. Overrides the selected quality preset when provided. | |
| format | No | Output image format. Defaults to PNG when omitted. | |
| height | No | Render height in pixels. Overrides the selected quality preset when provided. | |
| samples | No | Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided. | |
| outputDir | Yes | Directory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default. | |
| overwrite | No | Whether existing image files may be replaced. Defaults to false. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| qualityPreset | No | Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples). | |
| maxTimeSeconds | No | Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples. | |
| continueOnError | No | Continue rendering remaining cameras after one camera fails. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 queueADestructive
Render independent scene and camera jobs sequentially so KeyShot processes do not compete for a license or output files.
| Name | Required | Description | Default |
|---|---|---|---|
| jobs | Yes | Render jobs executed sequentially to avoid KeyShot license and output conflicts. | |
| continueOnError | No | Continue with later jobs after a failure. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and non-read-only, so the write profile is covered structurally. The description contributes the real behavioral trait beyond that — strict sequential execution and the reason (license and output-file contention) — but says nothing about whether the call blocks until the whole queue finishes, what partial results look like, or that a failure aborts subsequent jobs 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and the reason, zero redundancy. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the nested job schema is fully self-documenting. The remaining gap is operational rather than structural: for a destructive, license-consuming render queue the description never says whether invocation is blocking or returns job handles, which an agent needs before deciding to queue a heavy render.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every nested job field (scenePath, camera, qualityPreset, samples vs maxTimeSeconds, overwrite, outputPath) is documented in the schema. The description adds no parameter-level meaning beyond the array being an ordered sequential queue, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (render independent scene/camera jobs as a sequential queue) and explains the mechanism, which is more than the title restates. It does not, however, name the siblings it must be distinguished from — keyshot_batch_render, keyshot_render_all_cameras, and keyshot_render all overlap on 'render multiple things', and the agent is left to infer which one takes an arbitrary heterogeneous job list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The stated rationale ('so KeyShot processes do not compete for a license or output files') implies the usage context — several independent renders queued up rather than one. But there is no explicit when-not guidance and no named alternative, which matters in a sibling set containing three other render tools.
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 copyADestructive
Open an existing scene and save a copy to a requested path inside the configured safe output directory.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, consistent with the copy/overwrite behavior. The description adds the safe-output-directory constraint, but the more consequential behavioral detail (overwrite semantics, input files never replaced) lives in the schema rather than the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single lean sentence with the action and target front-loaded and no filler. It is efficient, though its brevity contributes to the missing alternative-routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations, an output schema, and full schema coverage, the description need only frame the core action, which it does: open a scene and save a copy into the safe output directory. The safe-directory framing is the key contextual point and it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents scenePath, outputScenePath, and overwrite. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific verbs (open, save a copy) and the resource (an existing scene, written to a requested path), which is far better than tautology. It does not, however, differentiate from the related sibling keyshot_sync_saved_scene or keyshot_inspect_scene, so an agent must infer the distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'open an existing scene and save a copy' suggests the copy workflow, but it never says when to choose this tool over keyshot_sync_saved_scene or other scene siblings, nor any prerequisites or exclusions. No explicit alternatives are named.
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 cameraBDestructive
Create or update a named camera using position, target, distance, field of view, or focal length, then save the edited scene.
| Name | Required | Description | Default |
|---|---|---|---|
| up | No | Optional camera up direction [x, y, z]. Requires position and lookAt. | |
| lookAt | No | Camera target [x, y, z]. Must be provided together with position. | |
| distance | No | Positive KeyShot camera distance. | |
| position | No | Camera position [x, y, z]. Must be provided together with lookAt. | |
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| cameraName | No | Saved camera to update, or the name to use when creating a camera. | |
| fieldOfView | No | Field of view in degrees, greater than 0 and less than 180. Cannot be combined with focalLength. | |
| focalLength | No | Focal length from 5 to 200 mm. Cannot be combined with fieldOfView. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds useful context by noting it 'save[s] the edited scene,' clarifying the write side effect, but it does not itself surface the overwrite/path-constraint behavior (which 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action and its inputs front-loaded and no wasted text. It could be marginally stronger by adding one routing clause, but nothing is superfluous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 params, an output schema, and annotations present, the description covers the core action, but for a destructive, non-idempotent scene-writing tool it omits when-to-use guidance and any pointer to overwrite/path semantics. Adequate minimum-viable coverage with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter and its constraints (mutual exclusion of fieldOfView/focalLength, up requires position+lookAt, overwrite defaults) are already documented. The description only names the input dimensions and adds no syntax or constraint detail beyond the schema — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (create or update) and resource (named camera), and lists the geometric inputs used. It is clear what the tool does, though it never names a sibling (e.g. keyshot_apply_camera_preset or keyshot_list_cameras) to sharpen the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'create or update a named camera' hints at when it applies but gives no explicit when/when-not or guidance on choosing it over keyshot_apply_camera_preset or preset-based camera workflows. The agent must infer the selection criteria.
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 environmentBDestructive
Select an environment by library name or local file, optionally change brightness and rotation, and save the edited scene.
| Name | Required | Description | Default |
|---|---|---|---|
| rotation | No | Environment rotation in degrees, from 0 inclusive to 360 exclusive. | |
| overwrite | No | Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true. | |
| scenePath | Yes | Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory. | |
| brightness | No | Positive brightness multiplier for the active environment. | |
| environmentName | No | Environment name from the KeyShot library. Cannot be combined with environmentPath. | |
| environmentPath | No | Absolute path to a local KeyShot environment file. Cannot be combined with environmentName. | |
| outputScenePath | Yes | Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=false, so the agent knows this is a non-idempotent write. The description adds only that brightness and rotation are optional. It omits important behavioral context: that the input scene is never modified and that output goes to a separate destination copy — a key reassurance given destructiveHint=true — and says nothing about overwrite behavior beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with three clauses and no filler. It is efficient, though packing environment selection, brightness, rotation, and saving into a single clause makes the save behavior easy to skim past.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a 7-parameter destructive write tool, the description omits that the source scene stays untouched, that outputScenePath must live inside the output directory, and the overwrite interaction. Adequate but not complete for the risk profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already fully carried by structured data. The description reinforces only the name-or-path choice and the optional brightness/rotation, adding no format, range, or constraint detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (select an environment, by library name or local file) plus the follow-on mutations of brightness/rotation and saving. It is distinguishable from siblings like keyshot_apply_material or keyshot_set_camera. The trailing 'save the edited scene' overlaps with keyshot_save_scene without clarifying the difference, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'By library name or local file' implies the two selection modes, but the description never states they are mutually exclusive (the schema does) nor when to prefer this tool over keyshot_save_scene despite both saving a scene. No explicit when-not guidance or prerequisites are given. Usage is inferable from the sentence but not spelled out.
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 statusARead-onlyIdempotent
Diagnose the local installation, output access, presets, bridge files, and a minimal KeyShot headless startup without modifying a user scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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 sceneADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Preview width in pixels. Defaults to 960; allowed range is 64 to 1920. | |
| camera | No | Optional saved camera name for the embedded preview. Omit to use the scene's active camera. | |
| height | No | Preview height in pixels. Defaults to 540; allowed range is 64 to 1080. | |
| samples | No | Preview render samples. Defaults to 16 unless maxTimeSeconds is provided; maximum is 64. | |
| sourcePath | Yes | Absolute path to a saved .bip scene or a directory whose newest .bip scene should be synchronized. Directories are searched only at their top level. | |
| includePreview | No | Whether to render and embed a temporary PNG from the synchronized copy. Defaults to true. | |
| maxTimeSeconds | No | Time-based preview limit in seconds. Replaces the default sample mode and cannot be combined with an explicit samples value; maximum is 60. | |
| outputScenePath | No | Optional destination for the synchronized .bip copy inside KEYSHOT_OUTPUT_DIR. Existing explicit paths are never overwritten; when omitted, a collision-safe name is generated. | |
| previousFingerprint | No | Optional fingerprint returned by an earlier sync. When it still matches, no copy or preview is created. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the requested operation completed successfully. |
| data | Yes | Operation-specific structured result data, or null when unavailable. |
| error | Yes | Human-readable failure reason, or null after success. |
| warnings | Yes | Non-fatal conditions the user or agent should review. |
| errorCode | No | Stable error category for common failures. |
| outputFiles | Yes | Absolute paths of images or scene files created by the operation. |
| suggestions | No | Actionable recovery steps for the user or agent. |
| keyshotStdoutTail | Yes | Truncated tail of KeyShot headless output for diagnostics. |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.13.5- Changed
keyshot_apply_camera_preset2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_apply_material2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_apply_material_preset2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_import_model2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_render1 field changed- added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_render_queue1 field changed- added
Input schema / properties / jobs / items / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_save_scene2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_set_camera2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
- Changed
keyshot_set_environment2 fields changed- changed
Input schema / properties / outputScenePath / descriptionPrevious value: -"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."New value: +"Destination path for a saved scene copy, never an input file. Existing files are rejected unless overwrite=true. Must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / overwriteAdded value: +{ + "description": "Allow replacing an existing output file. Defaults to false. Input files can never be replaced, even when true.", + "type": "boolean" +}
2 tool updates
v0.13.1- Changed
keyshot_apply_material1 field changed- changed
Input schema / properties / materialPath / descriptionPrevious value: -"Absolute path to a local KeyShot material file. Provide either materialPath or materialName."New value: +"Absolute path to a native single-material KeyShot MTL file, not a Wavefront OBJ companion MTL. Provide either materialPath or materialName."
- Changed
keyshot_product_render1 field changed- changed
Input schema / properties / materialAssignments / items / properties / materialPath / descriptionPrevious value: -"Absolute path to a local KeyShot material file. Choose one material source."New value: +"Absolute path to a native single-material KeyShot MTL file, not a Wavefront OBJ companion MTL. Choose one material source."
19 tool updates
v0.13.0- Changed
keyshot_apply_camera_preset4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_apply_material4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_apply_material_preset4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_batch_render7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / height / maximumAdded value: +9007199254740991 - added
Input schema / properties / samples / maximumAdded value: +9007199254740991 - added
Input schema / properties / width / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_import_model4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_inspect_scene4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_list_camera_presets4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_list_cameras4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_list_material_presets4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_preview_render4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_product_render14 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / height / maximumAdded value: +9007199254740991 - changed
Input schema / properties / lookAt / itemsPrevious value: -[ - { - "$ref": "#/properties/position/items/0" - }, - { - "$ref": "#/properties/position/items/1" - }, - { - "$ref": "#/properties/position/items/2" - } -]New value: +false - added
Input schema / properties / lookAt / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } +] - removed
Input schema / properties / materialAssignments / items / additionalPropertiesRemoved value: -false - changed
Input schema / properties / position / itemsPrevious value: -[ - { - "type": "number" - }, - { - "type": "number" - }, - { - "type": "number" - } -]New value: +false - added
Input schema / properties / position / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } +] - added
Input schema / properties / samples / maximumAdded value: +9007199254740991 - changed
Input schema / properties / up / itemsPrevious value: -[ - { - "$ref": "#/properties/position/items/0" - }, - { - "$ref": "#/properties/position/items/1" - }, - { - "$ref": "#/properties/position/items/2" - } -]New value: +false - added
Input schema / properties / up / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } +] - added
Input schema / properties / width / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_render7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / height / maximumAdded value: +9007199254740991 - added
Input schema / properties / samples / maximumAdded value: +9007199254740991 - added
Input schema / properties / width / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_render_all_cameras7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / height / maximumAdded value: +9007199254740991 - added
Input schema / properties / samples / maximumAdded value: +9007199254740991 - added
Input schema / properties / width / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_render_queue8 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / jobs / items / additionalPropertiesRemoved value: -false - added
Input schema / properties / jobs / items / properties / height / maximumAdded value: +9007199254740991 - added
Input schema / properties / jobs / items / properties / samples / maximumAdded value: +9007199254740991 - added
Input schema / properties / jobs / items / properties / width / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_save_scene4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_set_camera10 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / lookAt / itemsPrevious value: -[ - { - "$ref": "#/properties/position/items/0" - }, - { - "$ref": "#/properties/position/items/1" - }, - { - "$ref": "#/properties/position/items/2" - } -]New value: +false - added
Input schema / properties / lookAt / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } +] - changed
Input schema / properties / position / itemsPrevious value: -[ - { - "type": "number" - }, - { - "type": "number" - }, - { - "type": "number" - } -]New value: +false - added
Input schema / properties / position / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } +] - changed
Input schema / properties / up / itemsPrevious value: -[ - { - "$ref": "#/properties/position/items/0" - }, - { - "$ref": "#/properties/position/items/1" - }, - { - "$ref": "#/properties/position/items/2" - } -]New value: +false - added
Input schema / properties / up / prefixItemsAdded value: +[ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } +] - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_set_environment4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_status4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
- Changed
keyshot_sync_saved_scene4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / requiredPrevious value: -[ - "ok", - "outputFiles", - "warnings", - "keyshotStdoutTail", - "error" -]New value: +[ + "ok", + "data", + "outputFiles", + "warnings", + "keyshotStdoutTail", + "error" +]
1 tool update
v0.11.0- Added
keyshot_sync_saved_scene
18 tool updates
v0.10.0- Changed
keyshot_apply_camera_preset5 fields changed- added
Input schema / properties / cameraName / descriptionAdded value: +"Optional saved camera name. Defaults to the preset name." - added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / presetName / descriptionAdded value: +"Case-insensitive camera preset name returned by keyshot_list_camera_presets." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_apply_material7 fields changed- added
Input schema / properties / materialName / descriptionAdded value: +"Material name from the local KeyShot library. Provide either materialName or materialPath." - added
Input schema / properties / materialPath / descriptionAdded value: +"Absolute path to a local KeyShot material file. Provide either materialPath or materialName." - added
Input schema / properties / objectName / descriptionAdded value: +"Scene object name to modify. Provide either objectName or the more specific objectPath." - added
Input schema / properties / objectPath / descriptionAdded value: +"Full scene-tree path of the object to modify. Use this instead of objectName when names are duplicated." - added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_apply_material_preset6 fields changed- added
Input schema / properties / objectName / descriptionAdded value: +"Scene object name to modify. Provide either objectName or objectPath." - added
Input schema / properties / objectPath / descriptionAdded value: +"Full scene-tree path to modify. Prefer this when object names are duplicated." - added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / presetName / descriptionAdded value: +"Case-insensitive material preset name returned by keyshot_list_material_presets." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_batch_render11 fields changed- added
Input schema / properties / cameras / descriptionAdded value: +"Saved camera names to render in order. Use keyshot_list_cameras first when names are unknown." - added
Input schema / properties / format / descriptionAdded value: +"Output image format. Defaults to PNG when omitted." - added
Input schema / properties / height / descriptionAdded value: +"Render height in pixels. Overrides the selected quality preset when provided." - added
Input schema / properties / maxTimeSeconds / descriptionAdded value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples." - added
Input schema / properties / outputDir / descriptionAdded value: +"Directory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default." - added
Input schema / properties / overwrite / descriptionAdded value: +"Whether existing image files may be replaced. Defaults to false." - added
Input schema / properties / qualityPresetAdded value: +{ + "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).", + "enum": [ + "preview", + "standard", + "final" + ], + "type": "string" +} - added
Input schema / properties / samples / descriptionAdded value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - added
Input schema / properties / width / descriptionAdded value: +"Render width in pixels. Overrides the selected quality preset when provided." - changed
Output 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" +}
- Changed
keyshot_import_model8 fields changed- added
Input schema / properties / adjustCameraLookAtAdded value: +{ + "description": "Ask KeyShot to retarget the active camera to the imported geometry when supported.", + "type": "boolean" +} - added
Input schema / properties / adjustEnvironmentAdded value: +{ + "description": "Ask KeyShot to adjust the environment to the imported geometry when supported.", + "type": "boolean" +} - added
Input schema / properties / baseScenePath / descriptionAdded value: +"Optional existing KeyShot scene to use as the import base. Omit to start from an empty scene." - added
Input schema / properties / centerGeometryAdded value: +{ + "description": "Ask KeyShot to center imported geometry during import when supported.", + "type": "boolean" +} - added
Input schema / properties / modelPath / descriptionAdded value: +"Absolute path to a model file supported by KeyShot, such as OBJ, FBX, STL, or glTF." - added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / snapToGroundAdded value: +{ + "description": "Ask KeyShot to place imported geometry on the ground plane when supported.", + "type": "boolean" +} - changed
Output 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" +}
- Changed
keyshot_inspect_scene2 fields changed- added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_list_camera_presets2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output 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" +}
- Changed
keyshot_list_cameras2 fields changed- added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_list_material_presets2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output 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" +}
- Added
keyshot_preview_render - Added
keyshot_product_render - Changed
keyshot_render10 fields changed- added
Input schema / properties / camera / descriptionAdded value: +"Optional saved camera name to activate before rendering. Omit to use the scene's active camera." - added
Input schema / properties / format / descriptionAdded value: +"Output image format. Defaults to PNG when omitted." - added
Input schema / properties / height / descriptionAdded value: +"Render height in pixels. Overrides the selected quality preset when provided." - added
Input schema / properties / maxTimeSeconds / descriptionAdded value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples." - added
Input schema / properties / outputPath / descriptionAdded value: +"Destination image path. When omitted, a PNG name is generated inside KEYSHOT_OUTPUT_DIR." - added
Input schema / properties / qualityPresetAdded value: +{ + "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).", + "enum": [ + "preview", + "standard", + "final" + ], + "type": "string" +} - added
Input schema / properties / samples / descriptionAdded value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - added
Input schema / properties / width / descriptionAdded value: +"Render width in pixels. Overrides the selected quality preset when provided." - changed
Output 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" +}
- Changed
keyshot_render_all_cameras11 fields changed- added
Input schema / properties / continueOnError / descriptionAdded value: +"Continue rendering remaining cameras after one camera fails. Defaults to true." - added
Input schema / properties / format / descriptionAdded value: +"Output image format. Defaults to PNG when omitted." - added
Input schema / properties / height / descriptionAdded value: +"Render height in pixels. Overrides the selected quality preset when provided." - added
Input schema / properties / maxTimeSeconds / descriptionAdded value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples." - added
Input schema / properties / outputDir / descriptionAdded value: +"Directory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default." - added
Input schema / properties / overwrite / descriptionAdded value: +"Whether existing image files may be replaced. Defaults to false." - added
Input schema / properties / qualityPresetAdded value: +{ + "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).", + "enum": [ + "preview", + "standard", + "final" + ], + "type": "string" +} - added
Input schema / properties / samples / descriptionAdded value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - added
Input schema / properties / width / descriptionAdded value: +"Render width in pixels. Overrides the selected quality preset when provided." - changed
Output 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" +}
- Changed
keyshot_render_queue12 fields changed- added
Input schema / properties / continueOnError / descriptionAdded value: +"Continue with later jobs after a failure. Defaults to false." - added
Input schema / properties / jobs / descriptionAdded value: +"Render jobs executed sequentially to avoid KeyShot license and output conflicts." - added
Input schema / properties / jobs / items / properties / camera / descriptionAdded value: +"Optional saved camera name for this job. Omit to use the active camera." - added
Input schema / properties / jobs / items / properties / format / descriptionAdded value: +"Output image format. Defaults to PNG when omitted." - added
Input schema / properties / jobs / items / properties / height / descriptionAdded value: +"Render height in pixels. Overrides the selected quality preset when provided." - added
Input schema / properties / jobs / items / properties / maxTimeSeconds / descriptionAdded value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples." - added
Input schema / properties / jobs / items / properties / outputPath / descriptionAdded value: +"Destination image path for this queue job. A safe output name is generated when omitted." - added
Input schema / properties / jobs / items / properties / qualityPresetAdded value: +{ + "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).", + "enum": [ + "preview", + "standard", + "final" + ], + "type": "string" +} - added
Input schema / properties / jobs / items / properties / samples / descriptionAdded value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided." - added
Input schema / properties / jobs / items / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - added
Input schema / properties / jobs / items / properties / width / descriptionAdded value: +"Render width in pixels. Overrides the selected quality preset when provided." - changed
Output 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" +}
- Changed
keyshot_save_scene3 fields changed- added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_set_camera21 fields changed- added
Input schema / properties / cameraName / descriptionAdded value: +"Saved camera to update, or the name to use when creating a camera." - added
Input schema / properties / distance / descriptionAdded value: +"Positive KeyShot camera distance." - added
Input schema / properties / fieldOfViewAdded 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" +} - added
Input schema / properties / focalLengthAdded value: +{ + "description": "Focal length from 5 to 200 mm. Cannot be combined with fieldOfView.", + "maximum": 200, + "minimum": 5, + "type": "number" +} - removed
Input schema / properties / lookAt / $refRemoved value: -"#/properties/position" - added
Input schema / properties / lookAt / descriptionAdded value: +"Camera target [x, y, z]. Must be provided together with position." - added
Input schema / properties / lookAt / itemsAdded value: +[ + { + "$ref": "#/properties/position/items/0" + }, + { + "$ref": "#/properties/position/items/1" + }, + { + "$ref": "#/properties/position/items/2" + } +] - added
Input schema / properties / lookAt / maxItemsAdded value: +3 - added
Input schema / properties / lookAt / minItemsAdded value: +3 - added
Input schema / properties / lookAt / typeAdded value: +"array" - added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / position / descriptionAdded value: +"Camera position [x, y, z]. Must be provided together with lookAt." - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - removed
Input schema / properties / up / $refRemoved value: -"#/properties/position" - added
Input schema / properties / up / descriptionAdded value: +"Optional camera up direction [x, y, z]. Requires position and lookAt." - added
Input schema / properties / up / itemsAdded value: +[ + { + "$ref": "#/properties/position/items/0" + }, + { + "$ref": "#/properties/position/items/1" + }, + { + "$ref": "#/properties/position/items/2" + } +] - added
Input schema / properties / up / maxItemsAdded value: +3 - added
Input schema / properties / up / minItemsAdded value: +3 - added
Input schema / properties / up / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "scenePath", - "position", - "lookAt", - "outputScenePath" -]New value: +[ + "scenePath", + "outputScenePath" +] - changed
Output 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" +}
- Changed
keyshot_set_environment7 fields changed- added
Input schema / properties / brightness / descriptionAdded value: +"Positive brightness multiplier for the active environment." - added
Input schema / properties / environmentName / descriptionAdded value: +"Environment name from the KeyShot library. Cannot be combined with environmentPath." - added
Input schema / properties / environmentPath / descriptionAdded value: +"Absolute path to a local KeyShot environment file. Cannot be combined with environmentName." - added
Input schema / properties / outputScenePath / descriptionAdded value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled." - added
Input schema / properties / rotationAdded value: +{ + "description": "Environment rotation in degrees, from 0 inclusive to 360 exclusive.", + "exclusiveMaximum": 360, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / scenePath / descriptionAdded value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory." - changed
Output 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" +}
- Changed
keyshot_status2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output 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" +}
2 tool updates
v0.6.0- Added
keyshot_apply_camera_preset - Added
keyshot_list_camera_presets
1 tool update
v0.5.0- Added
keyshot_render_all_cameras
4 tool updates
v0.4.0- Added
keyshot_apply_material_preset - Added
keyshot_list_cameras - Added
keyshot_list_material_presets - Added
keyshot_render_queue
9 tool updates
v0.2.1- First observed
keyshot_apply_material - First observed
keyshot_batch_render - First observed
keyshot_import_model - First observed
keyshot_inspect_scene - First observed
keyshot_render - First observed
keyshot_save_scene - First observed
keyshot_set_camera - First observed
keyshot_set_environment - First observed
keyshot_status
TDQS
Scored across 19 tools
Several near-duplicate pairs exist: apply_material vs apply_material_preset and set_camera vs apply_camera_preset do the same thing with different inputs, and six tools (render, batch_render, render_all_cameras, render_queue, preview_render, product_render) all render images with only subtle scope differences. The descriptions do help distinguish most of them (explicit list vs all cameras vs sequential queue vs PNG preview vs end-to-end workflow), but an agent must read carefully to avoid misselection.
Every tool uses the keyshot_ prefix followed by lower_snake_case verb_noun (keyshot_set_camera, keyshot_list_cameras, keyshot_apply_material). No camelCase or mixed-style outliers; the pattern is predictable throughout.
19 tools is on the heavy side for a headless rendering server, and the count is inflated by near-redundant variants (material vs material_preset, camera vs camera_preset, four render entry points). Many tools genuinely earn their place, but consolidation could cut several without losing capability.
The surface covers the core lifecycle well: import model, inspect scene, assign materials, set cameras and environment, save scene, render across multiple strategies, plus presets and a status diagnostic. Gaps remain around object/scene editing (no add/delete/rename objects or lights, no animation/video render), but these are workable omissions rather than dead ends.
Maintenance
Related MCP Connectors
Build editable 3D scenes, direct characters and cameras, and export AI video references with MCP.
MCP server for Wan AI video generation
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP 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.11MIT
- AlicenseNot gradedqualityAmaintenanceA local, offline MCP server that enables AI agents to collaborate with SketchUp for controlled modeling, editing, and review tasks via 41 MCP tools.11Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA 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
- AlicenseNot gradedqualityCmaintenanceAn 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