KeyShot MCP
The KeyShot MCP server enables AI applications to control KeyShot Studio for 3D rendering and scene management through headless scripting. Here's what you can do:
Check Status (
keyshot_status): Verify that KeyShot headless is available and can start up correctly.Inspect Scenes (
keyshot_inspect_scene): Open a KeyShot scene file and retrieve details about objects, cameras, materials, and metadata.List Cameras (
keyshot_list_cameras): Get all available camera names in a scene — useful before batch rendering.Render a Single Image (
keyshot_render): Render a scene to an image file with control over resolution, camera, format (PNG, JPG, TIFF, EXR), samples, output path, and max render time.Batch Render (
keyshot_batch_render): Render multiple named cameras from a single scene into an output directory in one operation.Render Queue (
keyshot_render_queue): Run multiple render jobs sequentially, with an option to continue or stop on failure.Import a Model (
keyshot_import_model): Import a model file into an optional base scene and save the resulting scene.Apply a Material (
keyshot_apply_material): Apply a material by name or file path to a specific object in a scene.List Material Presets (
keyshot_list_material_presets): View available named material presets from the local preset library.Apply a Material Preset (
keyshot_apply_material_preset): Apply a named preset from the material library to a scene object.Set a Camera (
keyshot_set_camera): Create or update a camera using position, look-at, and up vectors.Set an Environment (
keyshot_set_environment): Apply an environment by name or file path to a scene, with optional brightness control.Save a Scene (
keyshot_save_scene): Save a KeyShot scene to a new file path.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@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.
KeyShot MCP connects an MCP-compatible AI agent to a licensed KeyShot installation on the same computer. KeyShot file processing stays local; however, an MCP client may send tool results, scene metadata, or embedded previews to its configured model provider. See Security before using confidential work.
English
Highlights
Start with a request, not a render-settings checklist. Use one product tool for model import, object materials, camera, environment, scene copy, and output.
See before committing. Bounded PNG previews are returned directly to the Agent for composition, material, and lighting feedback.
Keep source scenes protected. Editing workflows write controlled copies and reject output paths outside the configured safe directory by default.
Continue from the latest save. Saved-scene sync detects real file changes, creates a collision-safe copy, and avoids duplicate work with fingerprints.
Use focused controls when needed. Nineteen documented tools cover inspection, presets, cameras, materials, environments, render queues, and all-camera output.
Tested on Windows 11 with KeyShot Studio 2025 / KeyShot 14.1. KeyShot and a valid license are required and are not included with this independent project.
Quick start for designers
The easiest setup is to send this prompt to an agent that can edit your MCP configuration:
Install KeyShot MCP 0.11.0 and configure it in my MCP client.
1. Use: npx -y keyshot-mcp@0.11.0
2. Find my local keyshot_headless.exe and set KEYSHOT_HEADLESS_EXE to its full path.
3. Keep outputs in the default KeyShot MCP Outputs folder unless I choose another safe folder.
4. Keep KEYSHOT_ALLOW_EXTERNAL_OUTPUTS disabled.
5. Restart or reload the MCP client and run keyshot_status.
6. Explain any problem and its suggested fix in plain language.
7. Do not upload or publish my KeyShot files, persistent renders, or license information.
8. Before sending a preview image to the configured model provider, remind me when the scene is confidential.After setup, try:
Check whether KeyShot MCP is ready, then prepare a standard-quality product render
from C:\models\speaker.obj.Requirements
Node.js 20 or newer.
A locally installed and licensed KeyShot edition with headless scripting.
Windows 11 with KeyShot Studio 2025 / KeyShot 14.1 is tested.
Other KeyShot versions may work when they expose the same scripting APIs, but they are not currently verified by this project.
KeyShot, its license, materials, and environments are not included.
Why the stable release does not control the open KeyShot window
The stable server works on saved scene files through KeyShot headless scripting; it does not control the currently open, unsaved KeyShot GUI session. This is a boundary of the public KeyShot scripting execution model, not an omitted MCP connection. KeyShot's Script Runner keeps a GUI script active until that script returns. In our Live Companion prototype, keeping a bridge alive also kept the Script Runner open and blocked normal interaction with the KeyShot window.
Calling lux.sync() can flush pending KeyShot operations, but it does not provide
a documented background service, GUI event callback, or plugin lifecycle that can
safely host a persistent MCP bridge. Calling lux from an arbitrary worker thread
would also risk unsafe access to the scene. For that reason, the project does not
present the experimental bridge as production-ready realtime control.
For a reliable workflow, save the scene first. The Agent can inspect or edit a safe copy through headless KeyShot, return a preview, and preserve the original file. True realtime GUI control can be reconsidered if KeyShot exposes a supported non-blocking GUI extension or main-thread callback API.
Use keyshot_sync_saved_scene for the closest stable alternative to realtime
collaboration. Give it a saved .bip file or one folder containing .bip files.
It selects the newest saved scene, computes a content fingerprint, copies it to a
collision-safe output name, and returns an embedded preview by default. Pass the
returned fingerprint on the next call; if the user has not saved a new change,
the tool reports changed: false without creating another copy or render.
I saved my KeyShot scene in C:\projects\speaker. Sync the newest .bip from that
folder, show me a preview, and do not overwrite the original scene.Install
The current release is 0.11.0.
Run with npx
No global npm installation is required:
{
"mcpServers": {
"keyshot": {
"command": "npx",
"args": ["-y", "keyshot-mcp@0.11.0"],
"env": {
"KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
}
}
}
}Install globally
npm install -g keyshot-mcp@0.11.0{
"mcpServers": {
"keyshot": {
"command": "keyshot-mcp",
"env": {
"KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
}
}
}
}Run from source
git clone https://github.com/truman-t3/keyshot-mcp.git
cd keyshot-mcp
pnpm install
pnpm buildPoint the MCP client to the absolute path of dist/index.js. Ready-to-edit examples
are available in examples.
Restart the MCP client after changing its configuration, then call
keyshot_status. The status result checks the MCP version, KeyShot executable,
output access, bridge files, preset JSON, and a minimal KeyShot startup.
Common workflows
Preview before final rendering
Use keyshot_preview_render after checking a scene. It returns a PNG directly to
the Agent, so composition, materials, and lighting can be described and confirmed
before a standard or final render. Temporary previews are deleted automatically;
set outputPath only when a persistent PNG copy is needed.
Recommended loop: status check -> scene inspection -> preview -> Agent feedback -> user confirmation -> standard or final render.
One-call product render
keyshot_product_render is the recommended high-level tool for ordinary product
work. It can import a model or open a scene, apply object-specific materials,
configure a camera and environment, save a scene copy, and render in one KeyShot
process.
Import C:\models\speaker.obj, center and ground it, use the Isometric camera preset,
set a 55 mm focal length, save a scene copy, and render a standard PNG.For a new model, import composition options default to enabled. Existing scenes keep their current composition unless explicit changes are requested.
Render every camera
Render every saved camera in C:\scenes\speaker.bip at preview quality. Continue if
one camera fails and do not overwrite existing images.Use keyshot_batch_render instead when only selected named cameras are required.
Prepare a model without rendering
Import C:\models\speaker.obj, center it, place it on the ground, adjust the camera
target and environment, then save speaker-prepared.bip.Adjust camera and environment
Set the Product Hero camera to a 55 mm focal length and distance 6, rotate the
current environment to 45 degrees, save a new scene, then render a preview.fieldOfView and focalLength cannot be used together. position and lookAt
are optional, but must be supplied as a pair. samples and maxTimeSeconds select
different KeyShot render modes and cannot be combined.
Quality presets
Preset | Resolution | Samples | Use |
| 960 x 540 | 16 | Fast composition and material checks |
| 1920 x 1080 | 64 | Default for |
| 3840 x 2160 | 256 | High-resolution final output |
Explicit width, height, and samples override the corresponding preset values.
Explicit maxTimeSeconds switches to time-based rendering instead of preset samples.
Lower-level render tools preserve their existing behavior when no preset is given.
Tools
Tool | Purpose |
| Diagnose local configuration, output access, presets, and KeyShot startup. |
| Prepare, save, and render a model or scene in one process. |
| Return a temporary or saved PNG directly to the Agent for visual review. |
| Copy the newest saved scene safely, detect changes, and return a preview. |
| List scene metadata, objects, cameras, materials, model sets, and references. |
| Return saved camera names before a selected-camera render. |
| Render one active or named camera. |
| Run independent render jobs sequentially. |
| Render selected named cameras from one scene. |
| Discover and render every saved camera. |
| Import a model into an empty or base scene and save it. |
| Apply a KeyShot material name or local material file to one object. |
| List configured material presets. |
| Apply a configured material preset to one object. |
| Create or update camera transform, distance, FOV, or focal length. |
| List standard and custom camera presets. |
| Create or update a camera from a preset. |
| Select or adjust an environment, brightness, and rotation. |
| Save an existing scene to a controlled output path. |
The server also exposes one MCP Prompt for product rendering and one MCP Resource
describing the KeyShot headless workflow. The complete generated reference for
all 19 tools is available in docs/TOOLS.md. The bundled Agent Skill in
skills/keyshot-mcp teaches compatible agents how to install,
diagnose, and use the server safely.
Configuration
Variable | Default | Description |
|
| Full executable path or a command available on |
|
| Root for rendered images and saved scenes. |
|
| Allow output outside the configured root only when explicitly set to |
|
| Timeout for one KeyShot process. |
| empty | Optional launch arguments; diagnostics never echo their values. |
| bundled JSON | Optional user-managed material preset file. |
| bundled JSON | Optional user-managed camera preset file. |
All KeyShot operations run sequentially to reduce license and output conflicts.
Input scenes and models may come from any local path. By default, generated images
and scenes must remain inside KEYSHOT_OUTPUT_DIR; .., sibling-prefix, and
symlink/junction escapes are rejected.
Automatically generated product outputs use -2, -3, and later suffixes when a
name already exists. Explicit output paths are not silently renamed. Operations
that support overwrite require it to be set deliberately before replacing files.
Camera and material presets
The bundled camera library contains Front, Back, Left, Right, Top, Bottom, and
Isometric standard views. A custom camera JSON may define a standard view or an
absolute position, lookAt, and optional up vector.
Material presets reference a KeyShot library material name or local material file.
The MCP server reads preset files but does not edit them automatically. See
presets for the supported formats.
Reproducible KeyShot demo
The repository includes a smoke test built from generated cube geometry in
examples/demo. It verifies startup, import composition, scene
inspection, camera presets, lens controls, environment rotation, scene saving,
camera discovery, one-call product rendering, and real PNG output.
npm run smoke:keyshotGenerated .bip files and test renders stay in the configured local output
directory. A representative result is included below:

Development
pnpm install
pnpm check
pnpm test
python -m unittest discover -s tests -p "test_*.py"
npm pack --dry-runCI runs on Windows and Ubuntu with Node.js 20 and 24. Linux CI validates the MCP server, bridge logic, metadata, and package; it does not claim that KeyShot itself was tested on Linux.
Roadmap
Verify additional supported KeyShot releases on real installations.
Verify macOS installation and headless behavior.
Add depth-of-field and additional lens controls when stable headless APIs exist.
License, security, and trademarks
This project uses the MIT License. See SECURITY.md for security reporting and CONTRIBUTING.md for development guidance. Do not commit licenses, private scenes, customer assets, or unpublished renders.
KeyShot is a trademark of KeyShot ApS and/or KeyShot Inc. This independent open-source community project is not affiliated with, endorsed by, sponsored by, or otherwise associated with KeyShot. Users must install and license KeyShot separately and comply with its applicable terms. This project must not be used to bypass licensing or redistribute proprietary KeyShot software or assets.
Related MCP server: Daz Pilot
中文
KeyShot MCP 在本机处理 KeyShot 文件;但 MCP 客户端可能会把工具结果、场景元数据或 内嵌预览发送给它所配置的模型服务。处理保密项目之前请先阅读安全说明。
核心特点
从设计需求开始,而不是先填写一堆渲染参数。 一个产品出图工具即可完成模型导入、 指定对象材质、相机、环境、场景副本和渲染输出。
正式出图前先看预览。 预览 PNG 会直接返回给 Agent,用于检查构图、材质和光线。
保护源场景。 编辑流程默认生成受控副本,并拒绝向安全输出目录之外写入文件。
从最近一次保存继续。 保存同步会识别真实文件变化、创建不重名副本,并用内容指纹 避免重复处理。
需要精细控制时仍然可用。 19 个工具覆盖场景检查、预设、相机、材质、环境、 渲染队列和全部相机出图。
已实测 Windows 11 + KeyShot Studio 2025 / KeyShot 14.1。使用时需要另行安装并合法 授权 KeyShot;本项目是独立开源项目,不包含 KeyShot 软件或许可证。
设计师快速开始
最简单的安装方式,是把下面这段话发给能够修改 MCP 配置的 Agent:
请安装 KeyShot MCP 0.11.0,并配置到我的 MCP 客户端。
1. 使用:npx -y keyshot-mcp@0.11.0
2. 查找本机 keyshot_headless.exe,并把完整路径设置为 KEYSHOT_HEADLESS_EXE。
3. 默认把结果保存在“文档/KeyShot MCP Outputs”,除非我明确选择其他安全目录。
4. 保持 KEYSHOT_ALLOW_EXTERNAL_OUTPUTS 关闭。
5. 重启或重新加载 MCP 客户端,然后运行 keyshot_status。
6. 用普通设计师能理解的语言说明问题和修复建议。
7. 不要上传或发布我的 KeyShot 文件、保留的渲染图或许可证信息。
8. 如果场景属于保密项目,在把预览发送给模型服务之前先提醒我。安装后可以这样说:
检查 KeyShot MCP 是否准备就绪,然后用 C:\models\speaker.obj 生成一张标准质量的产品渲染图。使用要求
Node.js 20 或更高版本。
本机已安装、合法授权并支持 headless 脚本的 KeyShot。
已实测 Windows 11 + KeyShot Studio 2025 / KeyShot 14.1。
暴露相同脚本 API 的其他 KeyShot 版本可能可用,但本项目暂未完成实机验证。
本项目不包含 KeyShot、许可证、官方材质或环境资源。
为什么稳定版不能控制当前打开的 KeyShot 窗口
稳定版通过 KeyShot headless 脚本处理已经保存的场景文件,不能直接控制 KeyShot 窗口中尚未保存的当前会话。这是 KeyShot 现有公开脚本执行方式的边界,并不是 MCP 连接功能遗漏。
我们已经制作并实机测试过 Live Companion 原型。为了等待 Agent 指令,Bridge 脚本
必须长期保持运行;但 KeyShot Script Runner 会一直等待脚本结束,导致脚本窗口持续
占用并阻挡 KeyShot GUI 的正常交互。lux.sync() 只能同步待处理操作,公开文档没有
提供可安全承载常驻 MCP Bridge 的后台服务、GUI 事件回调或插件生命周期。让普通后台
线程直接调用 lux 也可能造成不安全的场景访问。因此,本项目没有把这个实验方案包装成
可用于正式工作的“实时控制”。
可靠的工作方式是先保存场景,再让 Agent 使用 headless KeyShot 检查或修改安全副本、 返回预览并保留原文件。如果 KeyShot 后续公开非阻塞 GUI 扩展接口或主线程回调 API, 本项目可以重新评估真正的实时 GUI 控制。
keyshot_sync_saved_scene 是目前最接近实时协作、同时保持稳定的方案。向它提供一个已
保存的 .bip 文件,或只包含当前项目场景的文件夹。工具会选择最近保存的场景、计算
内容指纹、复制到不会重名的安全输出路径,并默认返回内嵌预览。下一次调用时传入上次的
指纹;如果用户没有保存新的修改,工具会返回 changed: false,不会重复复制或渲染。
我已经把 KeyShot 场景保存在 C:\projects\speaker。请同步这个文件夹中最新的 .bip,
给我看预览,而且不要覆盖原场景。安装
当前正式版本为 0.11.0。
使用 npx 免安装运行
{
"mcpServers": {
"keyshot": {
"command": "npx",
"args": ["-y", "keyshot-mcp@0.11.0"],
"env": {
"KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
}
}
}
}全局安装
npm install -g keyshot-mcp@0.11.0{
"mcpServers": {
"keyshot": {
"command": "keyshot-mcp",
"env": {
"KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
}
}
}
}从源码运行
git clone https://github.com/truman-t3/keyshot-mcp.git
cd keyshot-mcp
pnpm install
pnpm build在 MCP 客户端中填写 dist/index.js 的绝对路径。可编辑配置示例位于
examples。修改配置后重启 MCP 客户端,再调用 keyshot_status。
状态检查会验证 MCP 版本、KeyShot 可执行文件、输出目录、bridge、预设 JSON, 并运行最小 KeyShot 启动测试。
常用工作流
正式渲染前先看预览
检查场景后调用 keyshot_preview_render。它会把 PNG 直接返回给 Agent,便于
先检查构图、材质和光线,再由用户确认是否继续标准或最终渲染。临时预览会自动
删除;只有需要保留图片时才填写 outputPath。
推荐流程:状态检查 -> 场景检查 -> 预览 -> Agent 描述问题 -> 用户确认 -> 标准或最终渲染。
一句话完成产品出图
普通产品工作优先使用 keyshot_product_render。它能在一个 KeyShot 进程中导入模型
或打开场景、应用指定材质、调整相机和环境、保存场景副本并渲染图片。
导入 C:\models\speaker.obj,自动居中贴地,使用 Isometric 相机预设和 55 mm 焦距,
保存场景副本并输出标准质量 PNG。新模型的导入构图选项默认开启;已有场景在没有明确要求时保留现有构图。
渲染全部相机
用预览质量渲染 C:\scenes\speaker.bip 中的全部相机。某个相机失败时继续,
并且不要覆盖已有图片。只渲染部分指定相机时,使用 keyshot_batch_render。
只整理模型,不渲染
导入 C:\models\speaker.obj,自动居中、贴地、调整相机观察点和环境,
然后保存为 speaker-prepared.bip。调整相机和环境
把 Product Hero 相机设置为 55 mm 焦距、距离 6,把当前环境旋转到 45 度,
保存新场景并渲染预览图。fieldOfView 与 focalLength 不能同时使用。position 和 lookAt 可以省略,
但修改位置时必须成对提供。samples 与 maxTimeSeconds 对应不同渲染模式,
不能同时使用。
质量预设
预设 | 分辨率 | 采样 | 用途 |
| 960 x 540 | 16 | 快速检查构图和材质 |
| 1920 x 1080 | 64 |
|
| 3840 x 2160 | 256 | 高清最终输出 |
显式填写的 width、height 和 samples 会分别覆盖预设值;填写
maxTimeSeconds 会改用限时渲染。底层渲染工具在没有指定预设时保持原有行为。
工具
工具 | 用途 |
| 检查本机配置、输出目录、预设和 KeyShot 启动状态。 |
| 在一个进程中整理、保存并渲染模型或场景。 |
| 将临时或保留的 PNG 直接返回给 Agent 进行视觉检查。 |
| 安全同步最近保存的场景、检测变化并返回预览。 |
| 查看场景、对象、相机、材质、模型集和外部引用。 |
| 返回场景中的相机名称。 |
| 渲染当前或指定相机。 |
| 顺序执行多个独立渲染任务。 |
| 渲染选定的多个相机。 |
| 自动发现并渲染全部相机。 |
| 导入模型并保存为场景。 |
| 给指定对象应用材质名称或本地材质文件。 |
| 列出材质预设。 |
| 给指定对象应用材质预设。 |
| 创建或修改相机位置、距离、视野角或焦距。 |
| 列出标准与自定义相机预设。 |
| 根据预设创建或修改相机。 |
| 选择或调整环境、亮度和旋转。 |
| 将场景保存到受控输出路径。 |
服务还提供一个产品渲染 MCP Prompt,以及一个说明 headless 工作流程的 MCP Resource。
完整的 19 个工具参考由代码自动生成在 docs/TOOLS.md。
skills/keyshot-mcp 中的 Agent Skill 会指导兼容的 Agent 安装、
诊断并安全使用这些工具。
配置
环境变量 | 默认值 | 说明 |
| Windows 上为 | 完整路径,或系统 |
|
| 渲染图和场景副本的根目录。 |
|
| 只有明确设为 |
|
| 单次 KeyShot 进程超时时间。 |
| 空 | 可选启动参数;诊断结果不会回显具体内容。 |
| 内置 JSON | 可选的用户材质预设文件。 |
| 内置 JSON | 可选的用户相机预设文件。 |
所有 KeyShot 操作串行执行,减少许可证和文件冲突。输入模型和场景可以位于任意本地
路径;生成的场景和图片默认只能写入 KEYSHOT_OUTPUT_DIR。系统会拒绝 ..、同名前缀
目录以及符号链接或目录联接逃逸。
自动生成的产品输出遇到重名时会使用 -2、-3 等编号。用户明确填写的路径不会
被静默改名;支持 overwrite 的操作只有在明确开启后才覆盖文件。
相机与材质预设
内置相机库包含 Front、Back、Left、Right、Top、Bottom 和 Isometric 七个标准视角。
自定义相机 JSON 可使用标准视角,也可提供绝对 position、lookAt 和可选 up。
材质预设引用 KeyShot 材质库名称或本地材质文件。MCP 只读取预设文件,不自动修改。
格式示例见 presets。
可复现的 KeyShot Demo
仓库使用 examples/demo 中生成的立方体几何体进行 smoke test,
验证启动、导入构图、场景检查、相机预设、镜头控制、环境旋转、场景保存、相机发现、
一键产品出图和真实 PNG 输出。
npm run smoke:keyshot生成的 .bip 和测试渲染图只保存在本地输出目录。仓库提供一张代表性结果:

开发与测试
pnpm install
pnpm check
pnpm test
python -m unittest discover -s tests -p "test_*.py"
npm pack --dry-runCI 在 Windows 和 Ubuntu 上使用 Node.js 20、24。Linux CI 验证 MCP 服务、bridge、 元数据和 npm 包,不表示 KeyShot 软件已经在 Linux 上通过实机测试。
路线图
在更多受支持的 KeyShot 正式版本上完成实机验证。
验证 macOS 安装和 headless 行为。
在稳定 headless API 可用后增加景深和更多镜头控制。
许可证、安全与商标
项目采用 MIT License。安全报告方式见 SECURITY.md, 开发说明见 CONTRIBUTING.md。请勿提交许可证、私有场景、客户素材 或未公开渲染图。
KeyShot 是 KeyShot ApS 和/或 KeyShot Inc. 的商标。本项目是独立开源社区项目, 与 KeyShot 官方无隶属、认可、赞助或其他合作关系。用户必须自行安装并合法授权 KeyShot,同时遵守适用条款。不得使用本项目绕过许可证或重新分发 KeyShot 专有软件 及资源。
Available Tools
19 toolskeyshot_apply_camera_presetApply a camera presetADestructive
Create or update a saved camera from a configured standard-view or absolute camera preset, then save the edited scene.
| 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. | |
| 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 the saved KeyShot scene. The path 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 | No | 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, and the description adds the dual action of applying and saving, plus 'create or update' implying potential overwrite of existing camera names. However, it doesn't disclose file overwrite specifics or required permissions, so it adds only modest context beyond 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?
The description is a single, well-structured sentence with no filler. It front-loads the action and outcome, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema's 100% parameter coverage and presence of an output schema, the description sufficiently covers the main workflow. Minor ambiguity in 'configured standard-view or absolute camera preset' is clarified by the schema's presetName description, making it adequately complete for a tool with strong annotations.
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%, with each parameter described. The tool description's high-level summary maps to parameters but doesn't add details beyond the schema, justifying the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: create/update a saved camera from a preset and save the scene. It uses specific verbs and resources ('create or update', 'camera preset', 'save the edited scene') and distinguishes from siblings like keyshot_set_camera or keyshot_save_scene by combining both actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a combined workflow (apply preset and save) and hints at using keyshot_list_camera_presets via the presetName schema description. However, it does not explicitly name alternatives or when-not-to-use conditions, so it falls short of a 5.
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 materialADestructive
Apply a KeyShot library material or local material file to a specific object, then save the edited scene.
| 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. | |
| 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 local KeyShot material file. Provide either materialPath or materialName. | |
| outputScenePath | Yes | Destination path for the saved KeyShot scene. The path 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 | No | 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 indicate destructive behavior (destructiveHint=true), and the description adds that the tool saves the edited scene. This is useful context beyond the raw annotation. However, it does not elaborate on other behavioral aspects such as file overwriting specifics, potential errors, or prerequisites. Given the annotation coverage, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential action without redundancy. Every word contributes to understanding the tool's purpose and workflow. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the fully detailed schema and output schema, provides sufficient context for understanding the tool's function. It covers the core workflow (apply material, save scene) without needing to explain return values. Minor gaps such as explicit failure modes or prerequisites are not critical given the schema richness, but a bit more behavioral context would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with detailed descriptions for all six parameters, including the distinction between objectName and objectPath and materialName and materialPath. The tool description itself adds no additional parameter semantics beyond what the schema already provides, so the baseline of 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: applying a KeyShot library material or local material file to a specific object, followed by saving the scene. This distinguishes it from sibling tools like keyshot_apply_material_preset (which applies a preset) and keyshot_save_scene (which only saves). The verb 'apply' and resource 'material' are precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning 'library material or local material file,' which hints at when to use this tool versus the preset-based alternative. However, it does not explicitly name alternatives or provide exclusionary guidance. The context is not fully developed, so it falls short of a 4.
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 presetADestructive
Resolve a configured material preset, apply it to one scene object, and save a new scene.
| 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. | |
| 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 the saved KeyShot scene. The path 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 | No | 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?
The description clearly states that a new scene is saved, implying the original input scene is not overwritten. This adds useful behavioral context beyond the annotations' destructiveHint=true, which might otherwise suggest the tool modifies the original. It does not disclose error handling for missing presets or object resolution, but the core side-effect is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the verb 'Resolve' and clearly outlines the three-step action. No filler or redundant information, 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?
Given the output schema exists, return values need not be explained. The description covers the full workflow from preset resolution to final save, and combined with rich parameter descriptions, it is sufficiently complete for an agent to invoke correctly. Minor gaps include object disambiguation (objectName vs objectPath) but this is covered in 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%, with each parameter (scenePath, objectName, objectPath, presetName, outputScenePath) having detailed descriptions. The tool description adds no additional parameter semantics, and the baseline for high schema coverage is 3.
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 specifies a clear multi-step action: resolve a preset, apply it to one object, and save a new scene. This distinguishes it from sibling tools like keyshot_apply_material and keyshot_list_material_presets by emphasizing the preset resolution and new scene output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for applying a material preset and saving a new scene, but does not explicitly state when to choose this over alternatives like keyshot_apply_material. The parameter description for presetName references keyshot_list_material_presets, giving some context, but no explicit when-not or alternative guidance is provided.
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 camerasADestructive
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 | No | 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, which the description does not contradict. The description adds that output goes to a directory but does not disclose additional behavioral details like overwrite rules, rendering time, or process requirements, though the schema covers overwrite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the action and scope. It contains no filler or redundant information.
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?
Despite being brief, the tool is well-specified through its rich schema (100% parameter coverage), annotations, and output schema. The description provides a clear overview; however, it omits explicit guidance on when to use this vs. sibling render tools, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 10 parameters have schema descriptions, and the schema provides detailed semantics (e.g., overlapping samples/maxTimeSeconds, outputDir path restrictions, qualityPreset values). The tool description itself adds no parameter-specific meaning beyond saying 'explicit list of saved cameras'.
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 uses a specific verb 'Render' and identifies the resource: 'explicit list of saved cameras from one scene' into an output directory. This clearly distinguishes it from siblings like keyshot_render_all_cameras (all cameras) and keyshot_preview_render.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for batch-rendering specific cameras but does not explicitly state when to choose this over alternatives such as keyshot_render_all_cameras or keyshot_preview_render. The 'cameras' parameter schema adds a prerequisite ('Use keyshot_list_cameras first') but this is not in the tool description.
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. | |
| 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 the saved KeyShot scene. The path 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 | No | 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?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds that it applies 'requested composition options' and 'saves a new scene', but does not disclose overwrite behavior or other potential side effects beyond what the schema implies. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary action ('Import a supported local model'), specifies the optional base scene, and states the output. It contains no redundant or vague words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, complete schema descriptions, and the presence of an output schema, the description adequately summarizes the workflow. It does not discuss limitations like unsupported formats or error handling, but those are covered by the schema and output schema, and the description is sufficiently complete for an import 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?
The input schema has full descriptions for all 7 parameters (100% coverage), including paths and boolean options. The description's phrase 'apply requested composition options' is a high-level aggregation and adds no detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Import') and resource ('a supported local model') and states the outcome ('save a new scene'). It clearly distinguishes this tool from siblings like keyshot_render or keyshot_inspect_scene by focusing solely on the import workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool: to import a model into either an empty or an existing base scene and then save a new scene. While it does not name explicit alternatives, the scenario is specific enough to guide selection among siblings.
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 sceneARead-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 | No | 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, and destructiveHint=false. The description adds the 'read-only' behavior and specifies the exact data returned (metadata, objects, cameras, etc.), which provides additional context beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core action ('Open a scene read-only') and efficiently lists the return items. No redundant words or details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only inspection tool with a single parameter, an existing output schema, and strong annotations, the description covers the necessary aspects: what it does, what it returns, and its safety profile. It does not address edge cases like missing files, but these are not essential given the output schema and read-only nature.
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 input schema already provides full documentation for the single parameter 'scenePath', including its type and purpose. The description does not add further parameter-level details, so it does not improve on the schema's coverage.
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 uses specific verbs ('Open', 'return') and clearly identifies the resource ('scene') and the scope of what is returned (metadata, objects, cameras, material assignments, model sets, external references). It effectively distinguishes this inspection tool from rendering or camera-specific siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a read-only inspection of the scene is needed, but it does not explicitly state when to use this tool over alternatives like keyshot_list_cameras or keyshot_status. There is no mention of exclusions or preferred scenarios, leaving usage inferred from the verb 'inspect' and 'read-only'.
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 | No | 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, and destructiveHint=false. The description adds behavioral context by specifying that it reads a JSON configuration and does not open KeyShot. This goes beyond the structured hints, but could further explain failure modes (e.g., missing/invalid JSON) or the difference between 'standard' and 'absolute' presets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the action ('Read... return...') and includes all essential information without filler. Every word contributes to understanding the tool's purpose and 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?
For a zero-parameter read-only tool with an output schema and strong annotations, the description is complete. It states the input source (configured JSON), the operation (return presets), and the key constraint (without opening KeyShot). No additional return-value documentation is needed since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is trivially fully described. With no parameters to document, the description doesn't need to provide parameter-level details. Given the 0-param baseline of 4, this 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?
Description clearly states it reads the configured camera preset JSON and returns valid standard or absolute camera presets, with the key qualifier 'without opening KeyShot'. This distinguishes it from other camera-related tools like keyshot_list_cameras (which likely lists scene cameras) and keyshot_apply_camera_preset (which applies 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?
The phrase 'without opening KeyShot' provides clear context for when this tool is appropriate: when you need to inspect available presets without launching the application. However, it doesn't explicitly name alternatives or state when not to use it, such as clarifying that keyshot_list_cameras is for current scene cameras.
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 | No | 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, and destructiveHint=false, covering the safety profile. The description adds the contextual note 'without saving changes', which reinforces that opening the scene will not persist modifications. This is useful but not extensive, and it aligns with annotations, so a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of two concise sentences: the first states the core function and the second provides contextual usage. Every word earns its place, and the main action is front-loaded, making it clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter, the description covers purpose and usage, while the output schema and annotations handle return values and safety. The description also clarifies the non-mutating behavior, making it complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the scenePath parameter fully described as an absolute path to an existing KeyShot scene file, including a note about paths outside the output directory. The description does not add any parameter-specific details, so it relies on the schema, which already carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'saved camera names', and adds the qualifier 'without saving changes' to clarify the non-destructive nature. This distinguishes it from sibling tools like keyshot_set_camera or keyshot_render_all_cameras, which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool 'before selected-camera rendering when names are unknown', providing a clear usage context. It does not explicitly name alternative tools, but the guidance implies where this fits in a workflow, which is sufficient for a straightforward list operation.
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 | No | 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 and idempotentHint=true, but the description adds valuable context by specifying that it reads a local JSON configuration and does not open KeyShot. This goes beyond the safety profile of the annotations, though it doesn't detail response structure (covered by output 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?
The description is a single, well-structured sentence that quickly communicates the action, source, and output. Every word adds meaning, with no redundancy or filler.
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?
This is a simple, parameterless tool with an output schema present. The description completely covers what the tool does and where it gets its data, leaving no significant gaps for an AI agent to invoke it 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?
The tool has zero parameters, so the baseline is 4. The description adds the source of the data (configured local material preset JSON), which is useful semantic context beyond the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a configured local material preset JSON and returns valid preset names and material sources, without opening KeyShot. This uses a specific verb and resource, and distinguishes it from sibling tools like keyshot_list_camera_presets or keyshot_apply_material_preset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to obtain a list of material presets without needing to launch KeyShot. However, it does not explicitly mention alternatives or when not to use it, so it stops short of the highest score.
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 | No | 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?
The description discloses that temporary previews are deleted after embedding, which is a non-obvious behavioral detail beyond the readOnly/idempotent/non-destructive annotations. It also explains that an optional output path preserves a copy, aligning with the schema's 'never overwrites' guarantee.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and the second sentence efficiently conveys the temporary-file lifecycle. No superfluous 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?
The tool has 7 parameters and an output schema, so the description need not detail returns or every parameter. It covers the two most important behavioral caveats—temporary deletion and optional persistence—while annotations and schema cover the rest, making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds no parameter-specific syntax beyond what is already in the input schema. The phrase 'safe output path preserves a copy' mirrors the schema's outputPath description, providing no additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders a bounded PNG preview from an existing scene and returns it directly as MCP image content. This specific verb-resource-output combination distinguishes it from sibling render tools like keyshot_render or keyshot_batch_render, which likely produce full-resolution files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for bounded previews delivered as image content, which fits quick visual checks, but it does not explicitly compare to sibling tools or state exclusions. The context is clear but lacks direct guidance such as 'use this instead of keyshot_render for fast previews.'
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 | No | 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?
The annotations already declare destructiveHint=true. The description adds useful context such as 'headless process' and 'save a scene copy,' but it does not disclose details about overwrite behavior, error handling in allCameras mode, or what happens to the original scene. This is moderate additional value beyond 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?
One sentence with a colon-separated list, front-loaded with the action, and every phrase earns its place. No redundant filler or 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?
For a tool with 32 parameters, a single overview sentence is relatively thin. It omits important modes (single vs allCameras), mutual-exclusion constraints (modelPath vs scenePath), and overwrite behavior—though these are all covered in the schema. The description gives a helpful overview but isn't sufficient for an agent to fully understand the workflow without deep schema inspection.
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% with every parameter described. The description groups steps (assign materials, configure camera/environment, save scene copy, render) that map to parameter families, but it does not introduce any semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and resource ('complete product workflow'), with a concrete list of steps that clearly distinguishes this from single-purpose sibling tools like keyshot_import_model, keyshot_apply_material, or keyshot_render. It immediately signals the tool's all-in-one scope.
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 'complete product workflow' implies end-to-end use, but the description never explicitly says when to prefer this over individual sibling tools, nor does it mention exclusions or alternatives. Usage context is implied rather than stated, so it earns a 3.
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 viewADestructive
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. | |
| 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 | No | 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, and the description adds that it outputs to an image file. However, it does not disclose potential overwriting of outputPath, render time expectations, or license/prerequisite requirements. The description adds minimal behavioral context beyond the annotations, so it meets but does not exceed the baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and outcome. Every word adds value, with no redundant or filler 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?
Given the tool has 9 parameters and multiple render-related siblings, the description is somewhat minimal. It explains the basic purpose but does not guide the agent on when to choose this tool over alternatives or warn about side effects. The presence of a complete output schema and parameter descriptions keeps it at a minimally viable level.
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% with detailed per-parameter descriptions (e.g., qualityPreset dimensions and samples, samples vs. maxTimeSeconds conflict). The tool description adds no additional parameter-level meaning, so it does not go beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the core action: 'Render the active or a named camera from an existing scene to an image file.' This uses a specific verb ('Render') and resource ('camera from an existing scene'), and the title 'Render one KeyShot view' further distinguishes it from batch or product render siblings.
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 'from an existing scene' and 'active or a named camera' implies a single-view render use case, but the description does not explicitly contrast with siblings like keyshot_batch_render, keyshot_preview_render, or keyshot_render_all_cameras. It offers some contextual guidance without naming alternatives or exclusions.
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 | No | 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 disclose destructive intent (destructiveHint=true) and non-read-only nature. The description adds valuable context: headless process, collision-safe file names, and per-camera results. This goes beyond the structured annotations, though it omits details like error handling or overwrite behavior (which are 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?
The description is a single, well-structured sentence that front-loads the primary action ('Discover every saved camera') followed by key attributes. Every phrase earns its place—headless process, collision-safe filenames, per-camera results—without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters) and the presence of a full output schema, the description provides a solid overview: it states the operation, scope (all cameras), and notable behavior (headless, collision-safe, per-camera). It doesn't need to explain return values due to the output schema, and annotations cover the destructive nature. Minor gaps remain around error handling or overwrite semantics, but these are covered by 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?
The description does not delve into parameter specifics, but the input schema provides 100% coverage with detailed descriptions for all 10 parameters. Thus, the description adds no additional semantic value beyond what the schema already offers, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: discover every saved camera and render each view in one headless process. This distinguishes it from siblings like keyshot_render (single render) or keyshot_list_cameras (listing only) by emphasizing 'every saved camera' and 'per-camera results'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for batch rendering all cameras, providing clear context for when to use it. However, it doesn't explicitly mention alternatives or when not to use it, such as when only a specific camera is needed or when interactive rendering is required.
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 | No | 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. The description adds the key behavioral detail that processing is sequential to avoid KeyShot license and output file competition, going beyond what annotations provide. The potential to overwrite output files is implied by the warning about output files, though not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to explaining the tool's purpose and rationale.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior (sequential rendering of independent jobs) and the rationale (avoiding conflicts). With an output schema present and rich input schemas for each job, the description does not need to explain return values or all parameters. It is complete for the tool's primary function, though it could briefly mention the continueOnError option, which is already described in 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%, so the baseline is 3. The description does not elaborate on any individual parameters; it only states that jobs are independent scene and camera jobs, which is already captured in the schema. No additional semantic meaning beyond the schema is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Render' with the resource 'independent scene and camera jobs' and the mode 'sequentially', clearly distinguishing it from parallel rendering tools like keyshot_batch_render. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that jobs are rendered sequentially to avoid license and output file conflicts, implying this tool is for use when multiple independent render jobs could interfere. It does not explicitly name alternative tools, but the context is clear enough for an agent to infer appropriate use.
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 |
|---|---|---|---|
| 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 the saved KeyShot scene. The path 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 | No | 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, so the tool is known to be potentially destructive. The description adds the safe output directory constraint but does not disclose whether the original scene is modified, whether files may be overwritten, or what side effects opening the scene has on the current session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that immediately states the tool's purpose and key constraint. There is no unnecessary wording or repetition 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?
The tool is simple with only two parameters, a detailed schema, and a truthful annotation set. The description covers the essential behavior (open, save copy to allowed path). It lacks explicit mention of side effects (e.g., overwriting, effect on current scene), but these are partially covered by the destructiveHint annotation and the output schema would explain results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already documented in the schema. The description adds the safe directory requirement for outputScenePath, but this is also present in the schema. It does not add further semantic value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('save a copy') and the resource (a KeyShot scene), and specifies the destination constraint (inside the configured safe output directory). This distinguishes it from sibling tools like keyshot_render or keyshot_import_model.
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 usage is implied by the description and name, but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions. It does not mention for example 'use keyshot_inspect_scene to view without saving'.
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 cameraADestructive
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. | |
| 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 the saved KeyShot scene. The path 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 | No | 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 indicate destructiveHint=true and readOnly=false, and the description aligns by stating 'create or update' and 'save the edited scene.' However, it does not disclose additional behavioral details like whether an existing scene is overwritten or if any permissions/validations apply, so it only minimally adds transparency 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?
The description is a single, well-structured sentence with the action verb front-loaded. It avoids filler and directly states the purpose, making it highly concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed schema with 100% parameter coverage and the presence of an output schema, the description sufficiently covers the primary action. Minor gaps exist around usage versus camera-preset tools, but the high-quality schema information compensates, making the description adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% with per-property explanations, including constraints like position/lookAt pairing and fieldOfView/focalLength exclusion. The description merely lists the parameter categories and does not add meaningful semantics beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb--create or update--and identifies the resource as a named camera, with the adjustable parameters listed. It clearly distinguishes itself from sibling tools like keyshot_list_cameras or keyshot_apply_camera_preset by emphasizing direct camera configuration and scene saving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for directly configuring a camera and saving the result, but it does not explicitly address when to use it instead of alternatives such as applying a camera preset. The absence of explicit exclusions keeps it from a perfect score, though the context is unambiguous.
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 environmentADestructive
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. | |
| 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 the saved KeyShot scene. The path 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 | No | 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?
The description states it 'save[s] the edited scene', which is consistent with the destructiveHint=true annotation. It also discloses that it selects an environment and optionally changes brightness/rotation, providing behavioral context beyond the hint. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose, then lists optional adjustments and the save action. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key aspects: selection methods, optional parameters, and saving behavior. With an output schema present and annotations disclosing destructive behavior, the description does not need to explain return values or safety. It is complete enough for a tool with six parameters and two required fields.
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 all parameters (e.g., environmentName vs environmentPath mutual exclusion, outputScenePath destination). The description adds a little by saying 'optionally change brightness and rotation' and 'select by library name or local file', but this mostly reflects existing schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Select an environment' and then explains the optional modifications and save action. It clearly distinguishes from sibling tools like keyshot_set_camera (camera setup) and keyshot_save_scene (just saving), as this tool combines environment selection/editing with saving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use: when the user wants to change the environment in a KeyShot scene by library name or local file, adjust brightness/rotation, and save the result. It does not explicitly mention exclusions or alternatives, but the purpose is stated clearly enough that an agent can infer its use case.
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 | No | 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, and destructiveHint=false. The description adds valuable context beyond annotations by noting it performs a 'minimal KeyShot headless startup' and explicitly states the tool does not modify a user scene, which reinforces the non-destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that uses a strong verb ('Diagnose') and lays out all covered areas without extra words. It is front-loaded and immediately communicates the tool's purpose.
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 zero parameters, rich annotations, and an output schema (as indicated by context), the description fully covers what is needed: what the tool checks and its safety guarantee. No additional return-value explanation is required due to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to describe beyond the schema. The schema coverage is 100% (empty object), and the description does not need to add parameter meaning. The baseline for 0 parameters is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a diagnostic action ('Diagnose') and specifies the exact resources it covers (local installation, output access, presets, bridge files, minimal headless startup). This distinct focus on status checking differentiates it from sibling tools like rendering, importing, or material operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to check local installation and setup status) but does not explicitly mention alternatives or situations to avoid. However, the diagnostic purpose is self-evident relative to the sibling tool names, which are all action-oriented (render, apply, import).
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 | No | 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, lowering the burden. The description adds useful behavioral context: it detects changes, copies to a collision-safe path (avoiding overwrites), and optionally returns a preview. It also notes the tool is a stable alternative to GUI control, giving insight into its operating style. No contradictions with 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?
The description is two sentences, front-loaded with the core workflow, and contains no filler. It efficiently conveys the main actions and the key differentiator (stable alternative to GUI control) 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 9 parameters and an output schema, the description provides a solid high-level overview of the workflow, covering the main steps and the preview option. It does not delve into all edge cases, but the schema and output schema fill in the necessary detail. The description is complete enough for an agent to understand the tool's role and scope.
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 baseline is 3. The description's reference to 'collision-safe output path' and 'detect whether it changed' aligns with outputScenePath and previousFingerprint, but it does not add additional meaning beyond the schema. The schema already explains all parameters clearly, so the description adds minimal incremental value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: find a .bip file, detect changes, copy to a collision-safe path, and optionally generate a preview. It names the specific resource (.bip) and scope (newest in one folder). It also distinguishes itself as the stable alternative to unsupported persistent GUI control, setting it apart from sibling tools focused on rendering or scene inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when syncing saved KeyShot scenes is needed and positions it as an alternative to GUI control. However, it does not explicitly state when to use this tool versus sibling tools like keyshot_save_scene or keyshot_inspect_scene, and gives no exclusion criteria. The guidance is implied rather than explicit.
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. Dates show when Glama detected each change.
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
Multiple render tools (render, preview_render, batch_render, render_all_cameras, render_queue, product_render) create potential confusion, but descriptions clarify distinct use cases such as single file output, preview image, explicit camera list, all cameras, sequential jobs, and full workflow. An agent may still need to read carefully to select the right one, so there is some overlap.
All tools follow a clear keyshot_ prefix and mostly use verb_noun structure (inspect_scene, list_cameras, set_camera, apply_material). Minor deviations like keyshot_status and keyshot_render are acceptable and do not disrupt the overall pattern.
With 18 tools, the set is slightly above the typical 3-15 range but justified for a full rendering automation suite covering status, import, inspection, materials, cameras, environment, rendering, and scene saving. The tools are cohesive and not redundant, so the count feels appropriate for the domain.
The surface covers the core workflow end-to-end: diagnose, import, inspect, assign materials, set cameras and environment, render, and save scenes. Gaps like listing available environments or deeper scene editing are minor and can be worked around, keeping the set functional for its stated purpose.
Maintenance
Related MCP Connectors
Cloud Blender for AI agents: scenes, assets, renders, MP4, STL, GLB — over hosted remote MCP.
MCP server for Wan AI video generation
MCP server for building and testing AI agents with multi-model experimentation and insights.
AutoRender's MCP server for media assets, transformations, delivery, and workflow automation.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to control Blender through natural language for 3D scene creation, animation, and rendering. It provides over 550 actions and direct Python execution via a bridge to a live local Blender session.3MIT
- AlicenseNot gradedqualityBmaintenanceMCP 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.8MIT
- AlicenseNot gradedqualityBmaintenanceA local, offline MCP server that enables AI agents to collaborate with SketchUp for controlled modeling, editing, and review tasks via 41 MCP tools.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA 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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/truman-t3/keyshot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server