blender-research-mcp
This server provides a structured, transactional MCP interface for observably inspecting and editing Blender scenes without exposing arbitrary Python.
Observe Blender state: check application/project status, connection, context, scene contents, objects, geometry, materials, images, and viewport captures with raycasting.
Manage Blender lifecycle: launch/quit Blender and save, open, or reload
.blendprojects explicitly.Run reversible transactions: begin/commit/rollback with scene-generation guards, idempotency keys, and rollback on conflict or disconnect.
Author scenes semantically: create primitives, empties, cameras, and lights; duplicate/delete objects; set transforms, visibility, light/camera data, world, materials, images, active camera, and Eevee preview/render outputs.
Perform bounded LookDev edits: set object visibility, modifier state, shape key values, and material inputs; compare one property across baseline plus 1–3 candidates with automatic rollback.
Create and manage modifiers: inspect, create, set, reorder, and delete supported Mesh modifiers with stack fingerprints and guarded changes.
Edit meshes semantically: paginated mesh inspection, selection sets, local transforms, extrude/inset/bevel/delete/dissolve/merge, topology operations, component maps, object separation, and geometry validation.
Work with UVs and skin weights: inspect/edit UV layers, seams, pins, unwrap/pack; manage vertex groups and weights; transfer attributes; validate UV/weight results.
Assemble modular scenes: materialize mesh states, extract face regions, use component catalogs, organize collections/parenting, bind armatures, inspect/append library assets, and run multi-step atomic mesh batches with manifests.
Planned next: cross-object mesh joining and vertex welding (0.17).
Provides structured tools for interacting with Blender, including viewport observation and raycasting, object transforms and visibility, material and lookdev adjustments, semantic scene authoring, project and application lifecycle management, and transactional rollback.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@blender-research-mcpStart Blender, open my project, and compare roughness 0.2 and 0.5 on the selected material."
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.
Blender Research MCP
一个面向长期 Blender 研究的本地、可观察、可回退的语义化 MCP。
本项目不以“让模型执行任意 Blender Python”为主要交互方式,而是提供 选择、聚焦、视口观察、对象变换、材质参数调整和事务回滚等结构化工具。
当前状态
项目的首个纵向切片已通过 Blender 4.2.23 LTS 实时烟测:认证传输、
上下文观察、事务化局部缩放、显式/断线回退,以及 Microsoft Store 版
Blender 会话发现。0.4.0 在不依赖窗口像素的 GPU 离屏捕获上增加了诊断
着色、绝对 orbit、捕获绑定的 viewport.raycast 和有界 evaluated geometry
摘要。0.4.0 已通过 Blender 被 Codex 完全遮挡时的真实空间诊断烟测,
包括诊断着色、绝对 orbit、正交/透视 raycast、geometry inspect、旧证据
拒绝和事务回退。0.5.1 已实现并真实验证有类型、可回退的对象可见性、
Modifier 状态、Shape Key 值和材质输入预览,包括属性冲突保护、断线自动
回退。0.6.0 新增 lookdev.compare,可针对一个已检查属性生成基线和 1–3 个
候选证据,并在每个候选后独立回退与验证。0.7.0 进一步把 Blender 应用启动
与 .blend 项目生命周期拆成独立工具:Agent 可启动环境变量配置的 Blender,
随后按用户意图保存、打开、重载或关闭项目;该闭环已通过真实 Blender 4.2.23
验收。0.8.0 新增从空项目创建对象、Principled 材质、本地图像、World、Camera,
再以 Eevee Next 预览/导出的语义场景创作闭环;自动化门禁和真实月光水面验收
均已通过。0.9.0 新增统一且封闭类型的 object.set,可在一次原子调用中设置同一
对象的 TRS、可见性与 Light/Camera 数据;自动化门禁和真实 Blender 4.2.23 验收
均已通过。0.10.0 新增四类有界 Modifier 的完整栈创作:精确检查、创建、类型化
设置、排序、延迟删除和候选比较;自动化门禁和真实 Blender 4.2.23 验收均已通过。
0.10.1 修复同一事务内 linked-data 副本导致 Mesh users guard 自我失效的问题,
并保证复制选中源对象后保存/reload 不会让副本意外进入选择集。
0.10.2 进一步按 Blender RNA 的 float32 实际存储精度比较事务属性,避免
6.2 回读为 6.199999809... 时误报事务外冲突,同时仍能识别相邻 ULP 修改。
0.11.0 新增基础 Mesh 的分页检查、双指纹和事务 v4 快照,以及统一且封闭的
mesh.edit 组件编辑入口;自动化门禁和 Blender 4.2.23 发布验收均已通过。
0.11.1 将事务升级为协作语义 v5:用户可在 Agent 工作期间自由导航视图、切换
Shading/Overlay、选择和活动对象;Blender 原生保存则作为用户接受眼前状态的最终
意图屏障,停止后续写入和回退。
0.12.0 新增 revision-bound SelectionSet、基础/求值 SurfaceRef、定量几何验证,
以及七种保持拓扑不变的选择区域变形;事务升级到 v6,并继续保留用户 UI 与原生
保存优先语义;自动化与 Blender 4.2.23 发布验收均已通过。
0.13.0 新增单 revision ComponentMap、跨拓扑 revision 的 SelectionSet 精确重映射,
以及 subdivide、loop cut、bisect、split、bridge、fill 和 grid fill;事务升级到 v7,
所有 lineage 都来自同次 BMesh 操作和精确组件标记,不用空间距离猜测新索引。
0.13.1 在此基础上新增严格连续 ComponentMap 的公开组合、连通 FACE 区域到独立
对象的事务性分离,以及带命名资源、自动 remap 和验证断言的声明式 Mesh batch;
事务升级到 v8,batch 运行期失败会回退整个活动事务,而成功调用只推进一次全局
generation。
0.14.0 新增精确 UV Layer/Seam/Pin/坐标与隔离的官方 unwrap/pack,以及 Vertex
Group schema、稀疏蒙皮权重、属性传递和 UV/权重验证。拓扑与分离现在可显式选择
保留插值、已有属性即拒绝或丢弃结果属性;事务升级到 v9,Shape Key Mesh 也可执行
拓扑不变的 UV/权重写入。
0.15.0 新增显式 BASE / SHAPE_KEYS_CURRENT / FINAL_EVALUATED 实体化、非连通 FACE
区域提取,以及精确 Armature 检查与绑定。三项能力可在同一 transaction-v10 中
组合为独立工作副本、逻辑模块和骨架装配链,不修改、Apply 或替换源对象。
0.15.1 新增 revision-bound ComponentCatalog、精确 Collection 创建/链接、通用对象
父级设置,以及跨对象 mesh.batch.execute v3。批处理可将 materialize、连通片目录、
extract、场景组织和 rig.bind 串成一次 transaction-v11 原子装配,并返回带 SHA-256
的会话级 assembly manifest,而不向 .blend 写入项目专用元数据。
0.16.0 新增 SHA-bound library.inspect、事务型单根 library.append 和
mesh.batch.execute v4。外部静态 Object/Collection/Mesh 模板可在精确文件与条目
证据下成为本地可编辑数据,再接入对象对齐、动态 SurfaceRef、拟合、权重和绑定;
Library Link/Override、脚本/驱动、Action、约束与 Geometry Nodes 继续拒绝。
0.17.0 新增只读 mesh.join.preflight、事务型 mesh.join、显式
mesh.edit(weld_vertices) 和 mesh.batch.execute v5。跨对象合成会创建独立 BASE
Mesh 输出、为每个来源保留 JOIN_BRANCH lineage,并且只有调用方明确提交边界
SelectionSet 和距离规则时才焊接接缝;自动门禁与确定性 Blender 实机门已通过,
聚合同进程压力和真实角色笼拼接仍保留为未关闭的扩展验收项。
0.17.1 修复了同一事务中“先创建 Collection、再由后续操作放入对象”时结构 guard
仍停留在旧指纹、导致 rollback 误报冲突的问题;真实用户对 Collection 的外部修改
仍会被保护。分页 UV 检查也改为只计算所请求页面,并用明确警告延后全局岛屿指标,
避免大角色 Mesh 的正常检查被短超时误报为连接丢失。
0.17.2 修复了拓扑操作失败后重建 Vertex Group 导致的事务回退死锁、大网格边表
重排导致的 ComponentMap 错位,以及多层 UV/Pin Join 的原生崩溃与空材质槽处理。
失败恢复保留未改变的 Group identity;边映射按写回后的实际连接关系验证。
0.17.3 新增只读 mesh.boundary.inspect,以当前指纹分页报告边界分类、
定向路径、两组端点配对、侧轨歧义和搜索预算。旧 Grid Fill 的失败在写前
返回结构化诊断;单闭环要求明确四角,两个闭环使用 bridge。合法的周围
分叉不会仅因度数大于 2 被拒绝。边界补面后续阶段与现场证据见
分期路线图和
验收记录。
0.17.4 实现定向四边/闭环四角 Grid Fill、精确 create_edge/create_face 和开链
bridge,统一走现有事务写入器。生成前检查局部相交和属性来源;新 UV、权重
使用固定边界插值,独立 UV 岛需要显式选择。ComponentMap 分别报告真实血缘
和创建证据。全量测试、合成属性压力及 Blender 回滚/重连已通过。
0.17.5 完成局部质量检查、累计位移限制、嵌套 batch 引用与边界图像标注。
真实检查点的独立副本已完成侧带、中央补片、固定边界拟合、三层 UV 整理、
骨骼权重验证及 rollback / commit → save → reload。逐组件审计确认旧坐标、
权重、UV/Pin、Seam、绑定及其余对象保持不变;艺术与纹理布局评价仍待确认。
完整指标、参考未覆盖区域和可复用示例见上述验收记录。
2026-09-05 的新 issue 开发计划 建议先关闭后续相交/范围/位移数值反例,再交付静态 NPR 材质与相机对照、生产渲染任务、 已有动画有限帧采样。各项仍为计划;按多任务工作树方案 独立开发并串行集成公共入口,保留 0.18 Shape Key → 0.19 骨架 → 0.20 Modifier 的顺序。
补丁与既有 Join/Weld/batch、UV/权重实机回归见 0.17.2 验收记录。 既有验收记录见 首个纵向切片 和 0.3.1 自主观察闭环,以及 0.4.0 空间诊断 和 0.5.1 受限 LookDev 写入,以及 0.7.0 托管生命周期,以及 0.8.0 语义场景创作。 独立比较预览回归见 0.6.0 比较预览,统一对象设置见 0.9.0 对象设置。 0.10 Modifier 创作见 0.10.0 验收记录。 linked-data 事务修复见 0.10.1 验收记录。 float32 guard 与独立月光水面实作见 0.10.2 验收记录,语义 Mesh 编辑见 0.11.0 验收记录。 0.11.1 协作上下文与用户保存优先见 0.11.1 验收记录,0.12 SelectionSet 与求值曲面拟合见 0.12.0 验收记录,拓扑 revision 与 ComponentMap 见 0.13.0 验收记录。 0.13.1 对象分离与声明式 batch 见 0.13.1 验收记录。 0.14 UV 与蒙皮权重见 0.14.0 路线图和 0.14.0 验收记录。0.15 模块化 角色实体化见 0.15.0 路线图和 0.15.0 验收记录。 0.15.1 跨对象装配见 0.15.1 路线图和 0.15.1 验收记录。 0.16 受控 Library 与模板覆盖面见 0.16.0 路线图和 0.16.0 验收记录。 0.17 跨对象 Mesh 合成与接缝焊接见 0.17.0 路线图和 0.17.0 验收记录。
权威设计与交接信息见 docs/design.md,常见使用流程见 docs/usage.md,完整文档导航见 docs/README.md。公开仓库位于 Haiyang-Bian/blender-research-mcp。
Related MCP server: FaceLink
0.6.0 可比较预览
0.6.0 改善评审闭环而不扩大 Blender 写权限。新增
lookdev.compare:针对一个已检查的受限属性,自动生成“当前基线 + 1–3 个
绝对候选值”的并列图像、结构化 before/after 和像素差异;每个候选都在独立
事务中应用、捕获并回退,最终必须恢复基线、用户上下文和场景状态。
该工具不会自动选择最佳候选、commit 或保存 .blend。用户选定方向后,仍需
通过现有显式事务重新应用。灯光、任意 Modifier 参数、节点拓扑和位置/旋转仍
不进入 0.6.0。详细接口、检查点与验收门槛见
0.6.0 路线图。
0.7.0 应用与项目生命周期
应用和项目是两个独立层次:application.launch 只启动或复用 Blender,不接受
项目路径;project.open 只操作已经接入 MCP 的 Blender,不会隐式启动应用。
Agent 在用户要求“打开项目”时依次调用 application.status、必要时
application.launch,最后调用 project.open。
application.status/launch/quit管理 Blender 进程与托管会话;project.status/save/open/reload管理当前.blend文件;project.open默认 commit 活动事务、保存 dirty 当前项目,并加载目标保存的 UI 与受信任项目脚本;project.reload默认从磁盘重载并丢弃未保存修改;application.quit默认 commit、保存并关闭,显式save_current=false则直接 丢弃未保存修改。
用户明确要求保存、切换、重载或关闭即授权相应动作链,不再弹出第二次确认。
所有项目路径必须为绝对 .blend 路径,但不受项目根目录白名单限制。托管启动
使用随当前 wheel 发布的固定 add-on/bootstrap,不写 Blender 偏好或 startup
file。完整契约见
0.7.0 路线图。
0.8.0 语义场景创作
0.8.0 把事务升级到结构 delta v3,并新增 scene.inspect、对象创建/复制/删除与
完整 TRS、标准 Principled 材质、本地图像加载、七类语义贴图通道、World/活动
Camera,以及 Eevee Next 预览和 PNG/EXR 导出。用户明确要求搭建或修改静态场景
时,Agent 可在一个事务内自动完成“发现 → 多步写入 → 预览 → commit”;任何
属性、上下文、结构、链接或用户数冲突都会停止并整批回退。
该版本仍不开放任意 Python、任意节点图、网格组件编辑、Geometry Nodes、动画、
Cycles 或网络资产下载。transaction.commit 只保留内存状态;只有明确要求保存
或交付 .blend 时才调用 project.save。详细契约见
0.8.0 路线图。
0.9.0 统一对象设置
object.set 是同一对象属性的统一公共入口,支持 1–4 个不重复的 transform、
visibility、Light、Camera patch。请求在写入前完成全部校验和事务容量预留,固定
按“变换 → 可见性 → 对象数据”应用,整个调用只推进一次 generation;全为 no-op
时不记录 delta。共享 Light/Camera data 必须携带检查所得 identity、用户数和显式
共享范围。
内部仍按类型分派,不开放任意 RNA。对象创建/复制/删除、活动 Camera、材质、
World、Modifier 和渲染继续使用各自工具。lookdev.compare 同时增加
object_setting target,可比较变换轴、可见性、灯光颜色/形状/数值和相机参数。
详细契约见
0.9.0 路线图。
0.10.0 Modifier 创作
modifier.inspect 返回精确对象身份、完整有序栈、每项身份与类型化设置,以及
SHA-256 stack_fingerprint。modifier.create/set/move/delete 只支持 Mesh 上的
Bevel、Subdivision、Solidify 和 Boolean,并在事务中守护完整栈;外部改名、增删、
重排或受保护参数漂移都会停止回退而保留用户状态。
删除在事务内先禁用并标记 pending_delete,commit 后才真正移除;rollback 和断线
回退保持原 Modifier identity。Boolean 使用精确 Mesh operand identity,并拒绝
直接/传递环;Subdivision 与 Boolean 具有确定性几何预算。lookdev.compare 增加
modifier_setting target,但不比较 operand、创建、排序或删除。详细契约见
0.10.0 路线图。
0.11.0 语义 Mesh 编辑
mesh.inspect 分页返回基础 Mesh 的顶点、边或面,外加对象/Mesh identity、完整
对象用户集、预算、topology_fingerprint 与包含坐标、材质、平滑、UV/颜色/受支持
属性的 mesh_fingerprint。组件索引只在该完整指纹下有效;拓扑修改后必须重新检查。
mesh.edit 每次接受一个封闭语义操作:局部组件变换、面挤出/内插、边倒角、
删除/溶解、顶点合并、面材质/平滑或法线处理。OBJECT scope 会在共享数据时事务性
单用户化;SHARED_DATA 则修改检查所得全部共享对象。事务首次编辑保存完整 Mesh
快照,commit 清理快照,rollback/断线回退在完整 guard 通过后恢复;用户改动返回
冲突并保持原状。
水波等视觉表面细节应优先由材质表达,Modifier 用于非破坏性整体效果,只有真实 轮廓、结构或组件变化才使用 Mesh 编辑。0.11 不开放 UV 修改、任意数组/BMesh、 Modifier Apply、Shape Key 拓扑或任意 Python。详细契约见 0.11.0 路线图。
0.11.1 人机协作上下文与用户保存优先
事务硬上下文只守护 Scene、View Layer、模式、当前帧和活动 Camera;视图矩阵、 缩放、透视、Viewport lens、Shading、Overlay、选择和活动对象属于用户可协作的 UI 状态。rollback 只恢复事务数据,保留用户最新 UI。比较候选固定使用基线证据矩阵, 因此用户导航不会污染像素差异。
Blender 原生 Ctrl+S、Save As 和 Save Copy 在 save_pre 阶段接管活动事务,保留
保存时可见状态并取消断线回退。后续事务或比较请求收到稳定的“已由用户保存接受”
结果后必须停止,不重复保存。MCP project.save/open/quit 使用 managed-save 标记,
继续遵循既有先提交再写盘流程。架构依据见
decision 0011。
0.12.0 SelectionSet 与求值曲面拟合
mesh.inspect 现在返回由 Blender instance、Mesh identity、完整内容指纹和精确
用户集派生的 mesh_revision_id。mesh.selection.query/derive/inspect/release
在 add-on 会话内维护有界、不可变的 SelectionSet,不改变 Blender 的真实选择;
局部/世界空间、拓扑、材质、法线、测量和 capture-bound 屏幕查询都绑定该 revision。
mesh.surface.prepare/query 可将基础或求值几何固定为带 Scene、View Layer、帧、
对象变换和三角指纹的 SurfaceRef,并提供最近点、射线与距离统计。mesh.validate
返回非流形、退化、朝向、相交、距离和穿透证据。mesh.edit 新增 set positions、
smooth、relax、project、shrinkwrap、inflate 和 flatten;它们引用 SelectionSet,保持
拓扑不变,并在成功后返回新 revision 及自动重绑定集合。详细契约见
0.12.0 路线图。
0.13.0 拓扑 Revision 与 ComponentMap
mesh.edit 的拓扑操作现在返回一步 ComponentMap,记录同域组件的
SURVIVED/SPLIT/MERGED/DERIVED lineage,以及新建和删除集合。Agent 可通过
mesh.selection.remap 把旧 SelectionSet 映射到下一 revision,并通过
mesh.component_map.inspect 分页审查正向、反向、新建或删除证据。
新增的封闭操作为 subdivide、quad-ring loop cut、平面 bisect、Mesh 内 split、 双边界 bridge、NGON/triangles fill 和带 rails 的 grid fill。Map 只跨一步;连续拓扑 编辑必须逐步重映射,rollback/断线恢复会使 after-map 失效。详细契约见 0.13.0 路线图。
0.13.1 对象分离与声明式 Mesh 批处理
mesh.component_map.compose 将 2–8 张严格连续 Map 合成为普通 lineage 资源,
仍可分页检查、释放和重映射 SelectionSet。mesh.separate 只接受一个连通、非空、
非全量 FACE SelectionSet,并返回 SOURCE/SEPARATED 两条精确分支 Map;共享 Mesh
会先只为目标对象事务性单用户化,peer 不受影响。
mesh.batch.execute 在一次 Blender 主线程调用中执行 1–32 个封闭步骤:选择查询/
派生、0.12 变形、0.13 拓扑、对象分离和几何验证。调用内别名替代大规模中间 JSON,
拓扑后自动 remap 当前 SelectionSet,分支链自动生成 composed Map。静态预检失败不
改场景;任一运行期错误或断言失败则回退整个活动事务,包括 batch 前同一事务中的
Agent 写入。详细边界见
0.13.1 路线图。
0.14.0 UV 与蒙皮权重创作
mesh.uv.inspect/edit 提供 UV Layer、Seam、Pin、corner 坐标、岛屿变换,以及在
临时对象/私有上下文中运行的 Blender Angle-Based/Conformal unwrap 与 pack;真实
对象的模式、选择、Workspace 和视口不参与算法输入。mesh.weights.inspect/edit
提供 Vertex Group 生命周期、精确权重写入、归一化与影响数限制,并明确处理 locked
Group 和共享 Mesh 用户的 schema 一致性。
mesh.attribute.transfer 支持 topology lineage、nearest vertex 和 barycentric
nearest surface 的 UV/权重迁移;mesh.validate 返回 UV 越界、退化、重叠、stretch
及权重总和、影响数、未赋权和骨骼匹配问题的 SelectionSet。mesh.batch.execute
可在同一次主线程调用中组合这些步骤,并在 UV revision 改变后自动重绑定当前目标的
SelectionSet。详细边界见
0.14.0 路线图。
0.15.0 模块化角色实体化与绑定
mesh.materialize 从精确基础 Mesh、仅当前 Shape Key 结果或实时最终求值结果创建
独立对象。输出没有 Shape Key、Modifier 或父级,保持源对象世界变换,并逐项声明
材料、UV 与权重复制;拓扑一致时返回精确 MATERIALIZATION ComponentMap,拓扑
变化时明确不猜测 lineage。
mesh.extract.preflight/extract 将一个或多个连通 FACE 区域提取为单一对象,同时
返回 SOURCE/EXTRACTED 两条分支 Map、两侧 SelectionSet 和属性迁移证据。
rig.inspect/bind 只装配已有权重:精确验证 Armature、骨骼 schema、Group 与现有
Modifier,创建或更新一个 Armature Modifier,并按显式策略设置对象父级;不会隐式
生成、传递或归一权重。
三步可在同一事务中串联,任一步失败、显式 rollback 或断连都会恢复到 begin 基线;Blender 原生保存仍以用户当前可见状态为最终接管。0.15 不开放 Shape Key 结构写入、Modifier Apply、任意 RNA/BMesh/Python、Library append 或角色专用捷径。 详细契约见 0.15.0 路线图。
0.15.1 ComponentCatalog 与跨对象装配
mesh.component_catalog.prepare/inspect/select/release 将一个实时 FACE
SelectionSet 按共享边划分为紧凑、可分页的连通片目录;只有选中的组件才物化为新
SelectionSet。Catalog 与对象、Mesh、用户集、revision 和完整指纹绑定,不受用户
视图或真实选择影响,Mesh 改变后会明确 stale。
collection.inspect/create/link_object/unlink_object 和
object.parent.set/clear 提供精确、可回退的场景组织。移动对象需先链接目标
Collection 再取消旧链接;最后一个 Collection 链接不会被隐式移除。父级操作显式
选择 KEEP_WORLD 或 KEEP_LOCAL,并拒绝父级循环。
mesh.batch.execute v3 可用别名在一次主线程调用中编排 materialize、Catalog、
extract、Collection、父级和 rig.bind。运行期失败回退完整活动事务,成功写入只推进
一次 generation;响应中的 assembly_manifest 汇总最终资源和证据并计算 SHA-256,
但不持久写入项目属性。详细边界见
0.15.1 路线图。
0.16.0 受控 Library 与模板覆盖面
library.inspect 在服务端流式计算本地绝对 .blend 的 SHA-256 和文件头证据,
并由 Blender 只读枚举精确 Object、Collection、Mesh 条目。library.append 每次只
追加一个检查所得根条目,以本地副本语义创建受事务闭包 guard 保护的数据;根输出
名称必须精确可用,文件或条目漂移、脚本化/动画化数据、不支持依赖和预算越界均在
保留当前场景的前提下拒绝。
mesh.batch.execute v4 新增 Library alias、Library append、object_set 和动态
mesh_surface_prepare 步骤。追加的 Mesh/Armature/Collection 可在同一主线程批次中
继续完成对齐、SelectionSet 拟合、UV/权重传递、Collection/父级组织、rig.bind 和
距离/穿透/相交验证;任一步失败仍回退完整活动事务,manifest 只作为响应证据。
模板只提供不存在几何的先验形体,不宣称恢复遮挡下不存在的原始人体数据。详细边界见
0.16.0 路线图。
0.17.0 跨对象 Mesh 合成与接缝焊接
0.17 新增只读 mesh.join.preflight 和事务型 mesh.join:将 2–32 个精确
BASE Mesh 对象转换到明确坐标系,按显式策略统一材质、UV、颜色和 Vertex Group,
创建一个独立输出,并为每个输入返回一条 JOIN_BRANCH ComponentMap。输入对象是保留
还是在 commit 时删除由请求直接声明。
join 不会自动按距离焊接。新的 mesh.edit(weld_vertices) 只处理同一 revision 上
显式 SelectionSet 接受的顶点组,并返回 MERGED lineage、属性影响和新的边界证据。
Batch v5 将 Library append、拟合、join、weld、权重、绑定和验证组合为一次原子流程。
Batch v5 会为每个来源维护 JOIN_BRANCH → Weld/Topology 的独立组合 Map,并在
assembly manifest 中记录 Join schema 与边界证据。会话资源上限相应扩展为 192 个
SelectionSet 和 128 张 ComponentMap,组件/关系总预算不变。确定性
commit/save/reload 实机门已通过;聚合同会话压力与真实角色笼拼接仍明确待关闭。
模型结构主线仍按 0.18 Shape Key、0.19 骨架创作、0.20 Modifier 最终化推进;
此前插入的正确性与渲染工作见上述 2026-09-05 更新计划。详细
接口、事务语义和实机验收计划见
0.17.0 路线图和
0.16 后模型编辑完整性方向;实机证据与
尚存限制见
0.17.0 验收记录。
目录
blender_addon/ Blender 端插件包
docs/ 设计、决策和协议文档
src/blender_research_mcp/ 外部 MCP 服务端 Python 包
skills/ 仓库版本化的 Codex 工作流 skill
tests/ 不依赖 Blender 的快速测试开发
项目使用 uv 管理 Python 与依赖:
uv sync
uv run --no-sync pytest
uv run --no-sync ruff check .
uv run --no-sync mypy检查当前 CLI 版本:
uv run --no-sync blender-research-mcp --version构建 Blender 开发插件:
uv run --no-sync python scripts/build_addon.py --version 0.17.2--version 会同时校验项目版本、插件运行时版本和 Blender bl_info,并默认
输出对应版本号的 ZIP;任何不一致都会终止构建。统一质量门可以在命令行运行:
uv run --no-sync python scripts/quality_gate.py仓库还提供三个可共享的 PyCharm Run Configuration:
Build - Add-on (version):启动时询问版本号并执行上述受校验构建;
Tests - Pytest:使用 PyCharm 原生 pytest runner,提供测试树、定位与调试;
Tests - Full Quality Gate:依次执行 pytest、Ruff 和 mypy,首项失败即停止。
配置保存在 .run/,pytest runner 明确使用由 uv sync 管理的项目 .venv,
不会读取或修改个人 .idea/workspace.xml 中的旧 SDK 设置。若刚拉取配置后
列表尚未刷新,重新加载项目即可。
外部 MCP 服务无参数时通过 stdio 启动,并自动发现端口 9877 的本地 Blender
插件会话。设置 BLENDER_RESEARCH_MCP_BLENDER_EXECUTABLE 后,Agent 也可通过
application.launch 启动可见 Blender。服务不提供任意 Python 工具;保存和
切换 .blend 只能通过明确的项目生命周期工具完成。
Windows 托管启动应配置一个能直接接收命令行参数的真实 blender.exe;Microsoft
Store 的 execution alias 会丢失受管 bootstrap 的环境和参数。已由用户启动的
Store Blender 仍可作为普通现有会话被发现和复用。
空间诊断
viewport.capture 和 observation.bundle 可临时使用 WIREFRAME、SOLID、
MATERIAL 或 RENDERED,并在完成后恢复用户的 shading、overlays、选择、
模式和视角。单图捕获还可从一个明确轴向执行绝对 yaw/pitch orbit。
每张成功图片返回会话内 capture_id。将图片上以左上角为原点的归一化
x/y 传给 viewport.raycast,即可获得 evaluated 场景中的几何命中对象、
世界坐标、法线和面索引。场景变化后旧 ID 返回 CAPTURE_STALE,调用方必须
重新捕获。object.geometry.inspect 提供网格计数、bounds、材质使用、modifier
和有界求值后拓扑摘要。mesh.inspect 则分页返回受完整指纹约束的基础 Mesh
组件;两者不能互换。
受限 LookDev 写入
object.lookdev.inspect 先枚举对象可见性、Modifier、非 Basis Shape Key 和
材质槽的会话身份;material.inspect 再枚举一个精确材质槽内至多 256 个输入
socket,并标明类型、范围、链接、驱动和可写原因。
所有写入都必须位于事务中,并携带检查结果里的精确身份、最新
scene_generation 和独立幂等键:
object.set统一设置同一对象的 TRS、可见性与有类型的 Light/Camera 数据;object.visibility.set只设置hide_viewport/hide_render;modifier.set_state只设置show_viewport/show_render;modifier.create/set/move/delete管理四类受支持 Modifier 的类型化有序栈;mesh.edit在事务 v4 中修改精确基础 Mesh 组件,并显式选择对象或共享数据范围;shape_key.set_value只设置非 Basis、无驱动且位于现有 slider 范围内的值;material.set_input只设置未链接、无驱动的 Float、Int、Boolean、Vector 或 Colordefault_value。
共享材质默认拒绝。只有调用者同时提供准确的 expected_material_users 和
allow_shared=true 才会修改,并返回所有可发现的受影响对象。系统不会自动
复制 single-user 材质,也不会改变节点拓扑。没有明确保留意图时应 rollback;
commit 仅保留 Blender 内存状态,仍不会保存 .blend。
当需要比较同一属性的多个绝对值时,lookdev.compare 会验证所有身份和实时
基线,再按请求顺序为每个候选执行独立的 begin、单次写入、capture 和 rollback。
只有全部候选都恢复成功时才返回完整图集和差异统计;工具不会给候选排名,也
不会 commit。选定方向后仍应通过普通事务显式应用。
0.9 的 object_setting 比较 locator 复用 object.set,支持单个 transform axis、
visibility、Light 或 Camera 字段。十六进制灯光颜色会在线性 RGB 中验证恢复,
但报告保留调用者提交的原始 JSON 值。
0.10 的 modifier_setting locator 携带完整对象、Modifier、类型、索引和栈指纹,
复用 modifier.set 比较一个数值、整数、布尔或枚举字段。创建、删除、排序和
Boolean operand 仍只通过显式事务操作,不进入候选比较。
Blender 控制区域
3D Viewport 的 Research MCP N-panel 只显示紧凑状态。完整 endpoint、 heartbeat、scene generation、命令耗时、事务和错误信息位于 Scene Properties > Blender Research MCP,并显示当前项目路径、dirty 状态和最近生命周期操作。插件不会自动切割 Area 或创建 Workspace;用户可以手动把任意现有 Area 切换为 Properties Editor。
运行条件
application.status/launch 与 project.status/save/open/reload/quit 不依赖
VIEW_3D。视口捕获仍需要 Blender 会话中存在 3D Viewport;GPU 上下文不可用
时返回 CAPTURE_GPU_UNAVAILABLE,不会把黑图作为证据。
配置 Codex
Blender 插件负责监听本地端口;Codex 还需要把外部服务注册为 STDIO MCP。 可在 Codex 的 MCP servers 设置页添加,也可以运行(替换仓库绝对路径):
codex mcp add blender_research -- uv --directory C:\absolute\path\to\blender-research-mcp run --no-sync blender-research-mcp等价的用户级 ~/.codex/config.toml 配置如下;cwd 必须替换为本仓库
的绝对路径:
[mcp_servers.blender_research]
command = "uv"
args = ["run", "--no-sync", "blender-research-mcp"]
cwd = "C:\\absolute\\path\\to\\blender-research-mcp"
env = { BLENDER_RESEARCH_MCP_BLENDER_EXECUTABLE = "C:\\Program Files\\Blender Foundation\\Blender 4.2\\blender.exe" }
startup_timeout_sec = 20
tool_timeout_sec = 60
default_tools_approval_mode = "writes"保存后重启 Codex,并用 /mcp 检查 blender_research。MCP 进程可以在
Blender 未启动时完成初始化;此时 application.status 正常返回
running=false,application.launch 可冷启动 Blender,而 project.* 明确
返回 APPLICATION_NOT_RUNNING,不会把启动和项目操作隐式耦合。
安装常用工作流 Skill
仓库中的 skills/blender-research-workflow 定义了连接验证、多视图观察、
项目生命周期、二维到三维诊断、意图驱动场景创作、受限写入检查、单变量事务预览、候选比较和恢复流程。安装到个人
Codex skills:
uv run --no-sync python scripts/install_codex_skill.py
uv run --no-sync python scripts/install_codex_skill.py --check安装器只会更新带本仓库来源标记的副本,不会覆盖同名的用户自建 skill。 首次安装后重启 Codex 以启用自动发现。
兼容目标
首要目标:Blender 4.2.23 LTS;
Blender 插件代码保持 Python 3.11 语法兼容;
MCP 服务端开发环境当前使用 Python 3.13;
普通安装和 Microsoft Store 打包版 Blender 均支持本地会话发现;
通信默认只监听回环地址,不启用遥测和第三方网络集成。
Available Tools
42 toolsapplication.launchAIdempotent
Reuse a compatible Blender MCP session or launch the configured Blender with the version-matched session add-on. This tool never opens a project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds useful context beyond those annotations: it never opens a project and it requires a 'version-matched session add-on,' which communicates an important compatibility behavior. No annotation contradiction is present.
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 with no filler. The first sentence communicates the core behavior; the second sentence adds a critical disambiguation. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, low-complexity tool with an output schema and supporting annotations, the description adequately covers the essential behavior. It does not detail launch failure modes or what 'configured Blender' means, but those details are not necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and schema description coverage is 100%, so the description is not required to explain parameter semantics. The baseline of 4 applies and the description introduces no conflicting or confusing parameter claims.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: 'launch the configured Blender' and 'reuse a compatible Blender MCP session.' It adds scope with 'This tool never opens a project,' which helps distinguish it from project.open, though it does not explicitly name sibling tools.
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 that this tool is used to establish or reuse a Blender session before working, but it never explicitly states 'use this when you need a live Blender session' or contrasts itself with application.status, connection.ping, or project.open. The negative boundary ('never opens a project') gives some guidance, but leaves the main usage decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
application.quitADestructiveIdempotent
Commit an active transaction, optionally save the current project, and quit Blender on the next main-thread tick.
| Name | Required | Description | Default |
|---|---|---|---|
| save_current | No | ||
| save_current_as | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive and read-only false. The description adds useful behavioral details beyond those annotations: the tool commits any active transaction, saving is conditional, and the quit happens on the next main-thread tick rather than immediately. No contradiction with 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 one efficient, well-ordered sentence. Each action is clearly separated and there is no filler or repetition.
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 core destructive behavior and timing are described, and an output schema exists so return-value documentation is unnecessary. However, the description does not provide parameter semantics for save_current_as or usage guidance relative to transaction/project tools, so it is not 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?
Schema description coverage is 0%, so the description must explain parameter meanings. It loosely covers 'save_current' via 'optionally save the current project', but gives no explanation of 'save_current_as' or how it relates to save_current. An agent cannot reliably infer what value to pass for save_current_as.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action sequence: commit an active transaction, optionally save the project, then quit Blender on the next main-thread tick. This clearly identifies the tool as the application exit action and is distinguishable from similar siblings like application.launch, transaction.commit, and project.save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to choose this tool instead of transaction.commit, transaction.rollback, or project.save. The agent must infer from the action list that this is the quit flow, but there is no mention of alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
application.statusARead-onlyIdempotent
Report whether a compatible Blender MCP session is running and summarize it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds useful context about compatibility checking and summarizing the session, but does not disclose anything beyond that, which is acceptable for a no-argument read-only status tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that opens with the action and the condition being checked. No filler or repeated schema 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?
For a no-argument status tool with rich annotations and an output schema, the description is complete enough to select and invoke correctly. The only slight gap is the unspecified meaning of 'compatible,' but the output schema can carry that detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is no parameter semantics burden. The schema coverage is 100% because the input schema is empty; a baseline of 4 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 ('Report'), names the resource ('compatible Blender MCP session'), and states the outcome ('whether ... running and summarize it'). This distinguishes it from sibling status tools like connection.ping (connection state) and project.status (project state).
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 intended use is implied: call this to check whether a compatible session is running before proceeding. However, the description never explicitly contrasts it with related siblings such as connection.ping or application.launch, and gives no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection.pingARead-onlyIdempotent
Check the authenticated Blender connection, versions, and UI heartbeat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds that the tool verifies the authenticated connection, versions, and UI heartbeat, which names what is checked but does not describe failure behavior, prerequisites beyond being authenticated, or additional operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, active-voice sentence with no redundant words. The verb and target are front-loaded, and every word contributes meaning.
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 low-complexity: no parameters, an output schema exists, and annotations cover read-only/idempotent behavior. The description states what the ping checks, which is sufficient for an 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 accepts zero parameters and the schema describes everything needed (an empty object), so there is nothing for the description to add. This falls under the 0-parameter baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Check') and identifies a distinct resource: the authenticated Blender connection, versions, and UI heartbeat. This clearly differentiates it from application.status and project.status siblings by focusing on connection/authentication state rather than application or project state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives like application.status or project.status. The word 'check' implies a health-check use case, but the agent must infer timing and conditions on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context.getARead-onlyIdempotent
Read the active Blender mode, selection, scene, and available viewports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds some useful scope detail ('active' mode, 'available' viewports), but beyond that it does not provide rich behavioral context such as response characteristics or timing.
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 with the verb and resource front-loaded. Every word contributes meaning, and there is 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?
With no parameters, strong annotations, and an output schema present, the description fully covers what the tool does and what the agent can expect. The enumerated context items are sufficient for a simple read-only 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 tool takes zero parameters, and the schema coverage is effectively complete. Per baseline for zero-parameter tools, the description is not required to add parameter detail, and it appropriately avoids inventing any.
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 starts with a clear verb ('Read') and names the exact resources: active Blender mode, selection, scene, and available viewports. This distinguishes it from siblings like context.snapshot and context.restore, which imply state capture/restoration rather than plain reading.
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 this should be used when an agent needs the current read-only Blender context state. It does not explicitly mention when not to use alternatives like context.snapshot, but the read-only framing and enumerated fields provide sufficient context for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context.restoreBIdempotent
Restore a previously captured session-local Blender context snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnly=false, destructive=false, idempotent=true, and the description adds only 'session-local' and 'previously captured' context. It does not explain whether restoring overwrites the current context or what happens with an invalid snapshot_id, though it does not contradict 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, front-loaded sentence with no wasted words. It efficiently conveys the verb, the object, and the scope.
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 one-parameter restore operation with an output schema and annotations, the description is minimally adequate. However, it lacks explicit context about how restoration affects the current session state and how this tool relates to context.snapshot and context.get.
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 0%, and the description never mentions snapshot_id or how it is obtained. The parameter name is self-explanatory to a degree, but the description does not compensate for the missing schema documentation or connect snapshot_id to context.snapshot.
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 action ('Restore'), the resource ('previously captured session-local Blender context snapshot'), and the scope ('session-local'). It does not explicitly differentiate from sibling tools like context.snapshot or context.get, so it relies on semantic inference rather than explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'previously captured' implies that a snapshot must already exist and suggests a prerequisite relationship with context.snapshot. However, there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or warnings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context.snapshotCRead-onlyIdempotent
Store the current user context in Blender and return a session-local token.
| Name | Required | Description | Default |
|---|---|---|---|
| viewport_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Store the current user context in Blender', which describes a state-changing write operation, while the annotations declare readOnlyHint=true. This is a direct contradiction comparable to the create_record example. The description does not add useful behavioral context beyond the annotations and instead misleads about the side effects.
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 and result. There is no wasted wording, and the syntactic structure is clean.
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 one optional parameter and output schema, the description still leaves important context unexplained: the role of viewport_id, when to snapshot versus get/restore, and the lifecycle or scope of the returned token. The annotation contradiction also makes the description incomplete and unreliable as a guide.
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 mention the viewport_id parameter at all, and schema description coverage is 0%. The schema only provides the title 'Viewport Id' and a null default, which gives no real semantic meaning about what viewport_id selects or how it affects the snapshot.
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 ('Store'), the target ('current user context in Blender'), and the result ('return a session-local token'). It is easy to distinguish from siblings like context.get and context.restore because it frames the tool as creating a snapshot for later use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of context.get or context.restore. The description implies a snapshot/restore workflow but does not explicitly state when to snapshot versus when to retrieve or restore context, leaving the selection decision to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image.inspectARead-onlyIdempotent
Inspect one exact Blender image data-block, including absolute path, identity, dimensions, color space, users, and packed state.
| Name | Required | Description | Default |
|---|---|---|---|
| image_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description adds useful behavioral context beyond those annotations by enumerating exactly what aspects of the image are inspected, including packed state and absolute path, and by emphasizing the exact-match scope.
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 with no filler. It front-loads the core purpose and then lists the returned attributes compactly, every phrase earning 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?
For a simple one-parameter read-only inspect tool with an output schema present, the description is nearly complete: it specifies the target, the scope, and the inspected aspects. It does not cover edge cases like missing images, but with output schema and read-only annotations available, that 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?
Schema description coverage is 0%, so the description must compensate. It partially does by indicating that the input identifies one exact Blender image data-block, making 'image_name' reasonably clear. However, it does not explain whether the name is the data-block name, a file name, or a path, nor does it address case sensitivity or lookup behavior.
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 ('Inspect') and a specific resource ('one exact Blender image data-block'), and lists concrete fields that will be returned (path, dimensions, color space, users, packed state). It clearly differentiates from sibling tools like image.load and other inspect tools by scoping to a single named image data-block.
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 context is implied: use this tool to retrieve details about one exact image data-block by name. However, the description does not explicitly state when not to use it or name alternatives such as image.load or the other inspect tools, so the guidance relies on inference from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image.loadADestructiveIdempotent
Load or reuse an image from an arbitrary absolute local path with a bounded color-space policy inside the active structural transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| colorspace | No | AUTO | |
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=true, openWorldHint=false, and idempotentHint=true, so the safety profile is mostly in structured data. The description adds the 'reuse' behavior and the 'bounded color-space policy' nuance, which is useful, but it doesn't clarify the destructive/transactional behavior beyond what annotations imply. No contradiction exists.
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 and then packs the key constraints efficiently. Every phrase adds meaning—'load or reuse' clarifies idempotency, 'arbitrary absolute local path' sets path expectations, and 'bounded color-space policy' and 'active structural transaction' define the operating context. There is no 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?
The tool has 5 parameters including an idempotency key and an expected generation counter, plus a destructive annotation and an output schema. The description explains the action and the transaction/color-space context, but does not mention the return value, the failure semantics of expected_scene_generation, or how idempotency_key affects call behavior. For an agent to correctly invoke this among many transaction-managed tools, more would be welcome, though the output schema likely covers return shape.
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 0%, so the schema carries almost no explanatory weight for the parameters. The description mentions 'local path' (path), 'color-space policy' (colorspace), and 'active structural transaction' (transaction_id-related state), which maps to some parameters. However, it does not add meaning for idempotency_key or expected_scene_generation, so with zero schema coverage the description only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('load or reuse'), a resource ('image from an arbitrary absolute local path'), and a key constraint ('bounded color-space policy inside the active structural transaction'). It distinguishes itself from image.inspect and material.texture.bind by covering image acquisition rather than inspection or binding, though it does not explicitly name a sibling.
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 loading/reusing images from local paths inside a transaction, but it does not explicitly state when to prefer this over image.inspect or material.texture.bind, nor does it mention the idempotency key and transaction prerequisites. The context and transaction language are present, but exclusions and alternatives are left to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookdev.compareBIdempotent
Capture a baseline and one to three absolute candidates for one inspected LookDev property, rolling every candidate back before returning evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| capture | Yes | ||
| candidates | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds genuinely useful behavior beyond the annotations: candidates are applied transiently and rolled back before returning evidence, which explains why readOnlyHint=false yet destructiveHint=false and idempotentHint=true all hold simultaneously. This is meaningful context, and it does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 20-word sentence that front-loads the core action and packs baseline, candidate count, scope, and side-effect behavior with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a huge discriminated-union schema, three required parameters, and no output schema, one sentence is insufficient: what 'evidence' is returned (captured images? data?) is never stated, 'absolute candidates' is never defined, and the prior-inspection prerequisite is only implied. The agent is left to reverse-engineer the full comparison workflow from the schema alone.
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?
With 0% schema description coverage, the description must compensate, but it barely does: it hints that candidates number 1–3 (matching minItems/maxItems) and are 'absolute', yet it says nothing about how to construct the heavily constrained target union (six variants discriminated by type, each requiring expected_identity fields) or the capture settings. The most complex parameter, target, is covered only by the vague phrase 'one inspected LookDev property'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation — capturing a baseline plus one to three candidates for a LookDev property — and the rollback clause distinguishes it from persistent mutation tools like object.set or material.set_input. However, 'absolute candidates' is unexplained jargon, and no sibling is named, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The wording 'for one inspected LookDev property' implies a prerequisite (prior inspection) and the rollback behavior implies this is for evaluating alternatives rather than committing values. But no explicit when-to-use/when-not-to-use guidance or alternative tool is named; an agent must infer the decision boundary between this and the persistent setters in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material.assignADestructiveIdempotent
Append, replace, or clear one exact material slot on inspected object data. Shared data requires its exact user count and explicit permission.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| slot_index | No | ||
| object_name | Yes | ||
| material_name | No | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| allow_shared_data | No | ||
| expected_data_users | Yes | ||
| expected_data_identity | Yes | ||
| expected_material_users | No | ||
| expected_object_identity | Yes | ||
| expected_scene_generation | Yes | ||
| expected_material_identity | No | ||
| expected_slot_material_identity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutating, destructive, and idempotent behavior. The description adds meaningful context beyond those flags: shared data has an explicit user-count and permission requirement. It does not contradict 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 short and front-loaded, with no filler wording. However, the second sentence is compact to the point of being cryptic; it could preserve its length while being clearer about which parameters the permission requirement refers to.
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 14-parameter mutation tool with 8 required parameters, including multiple identity and expected-state fields, yet the description only covers slot operations and the shared-data permission condition. An agent would not know how to correctly populate expected_object_identity, expected_data_identity, expected_scene_generation, idempotency_key, and related 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 0%, so the description must carry the parameter burden. It only hints at mode ('append, replace, or clear'), slot_index ('one exact material slot'), and expected_data_users/allow_shared_data ('exact user count and explicit permission'). The many required identity, transaction, and idempotency parameters are left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific set of operations ('Append, replace, or clear') on a specific resource ('one exact material slot on inspected object data'). This clearly distinguishes material.assign from nearby siblings like material.create or material.set_input.
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 a concrete precondition for shared data ('requires its exact user count and explicit permission'), which is useful usage guidance. However, it does not name alternatives or state when to use this tool over material.set_input, object.set, or material.texture.bind.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material.createBDestructiveIdempotent
Create a uniquely named canonical Principled PBR material with bounded semantic surface values inside the active structural transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| definition | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnlyHint=false, idempotentHint=true, and destructiveHint=true, so the safety profile is mostly structured. The description adds context about uniqueness and transaction-scoped creation, but it does not explain why destructiveHint=true applies or what effect creating inside a transaction has on existing scene state.
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 with no filler or redundant restatement of the tool name. It front-loads the core action and scoping constraint. The main issue is not length but clarity of the specialized terminology.
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 four required parameters, no schema descriptions, and important sibling context around transactions and material workflows. The description does not connect create to transaction lifecycle concepts, idempotency, or scene generation expectations, so an agent lacks enough context to invoke it correctly in a real workflow.
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 0%, so the description carries the full burden of explaining parameters. It does not clarify transaction_id, expected_scene_generation, idempotency_key, or how the MaterialDefinition should be structured beyond the vague phrase 'bounded semantic surface values'. This is insufficient for an agent to confidently construct the required arguments.
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 a specific verb and resource: 'Create a uniquely named canonical Principled PBR material'. It also hints at a distinguishing constraint, uniqueness and being inside an 'active structural transaction', which helps separate it from material.set_input or material.assign. However, phrases like 'canonical' and 'bounded semantic surface values' are jargon-heavy and less operational than they could be.
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 prerequisite: the creation must happen 'inside the active structural transaction'. This gives some context about when the tool is appropriate, but it does not explicitly say when to prefer this over siblings such as material.set_input, material.assign, or transaction.begin, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material.inspectARead-onlyIdempotent
Inspect one exact material slot and list bounded node input identities, values, ranges, links, drivers, and write eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes | ||
| material_slot_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 value by disclosing exactly what is surfaced: bounded node input identities, ranges, links, drivers, and write eligibility. This aligns with the read-only annotation and clarifies the introspection scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core verb and resource, then precisely lists the output contents. There is no filler or repetition of schema 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?
The tool has an output schema, read-only annotations, and a focused scope. The description sufficiently explains the purpose and returned data. It could add an explicit note about the object_name parameter or when to prefer this over material.set_input, but overall it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It reinforces the meaning of material_slot_index via 'one exact material slot', but it does not explicitly explain object_name or the relationship between the two parameters. The schema property names and constraints are still fairly self-explanatory, so the gap is moderate rather than severe.
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 uses a specific verb ('Inspect') and a specific resource ('one exact material slot'), then enumerates the exact data returned: node input identities, values, ranges, links, drivers, and write eligibility. This clearly distinguishes it from other inspect tools like object.inspect or material.set_input.
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 'one exact material slot' provides clear context that this is for targeted, read-only material inspection rather than broad scene or object inspection. It also implies a pre-write use case by exposing 'write eligibility', though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material.set_inputADestructiveIdempotent
Set one exact unlinked, undriven scalar/vector/color material input inside the active transaction. Shared materials require explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| node_name | Yes | ||
| object_name | Yes | ||
| allow_shared | No | ||
| material_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| socket_identifier | Yes | ||
| material_slot_index | Yes | ||
| expected_node_identity | Yes | ||
| expected_material_users | Yes | ||
| expected_object_identity | Yes | ||
| expected_socket_identity | Yes | ||
| expected_scene_generation | Yes | ||
| expected_material_identity | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds useful behavioral context about transaction scope and shared-material confirmation, but it does not explain the optimistic-concurrency expected_* parameters or what destructive actually means in this context. It partially complements the annotations without fully disclosing mutation implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The core operation is front-loaded, and the shared-material caution is placed at the end. 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?
This is a high-complexity tool with 15 parameters, including identity checks, transaction scoping, and idempotency. The description is far too minimal to cover prerequisites, failure semantics, or the purpose of the expected_* fields. An output schema exists, but it does not help explain the required parameters or behavioral constraints.
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 0%, and 14 parameters are required, so the description must compensate. It only hints at value types (scalar/vector/color) and shared-material confirmation (allow_shared). The many expected_* identity, generation, transaction_id, idempotency_key, node_name, socket_identifier, and material_slot_index parameters are entirely unexplained, leaving an agent unable to populate them correctly from the description alone.
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 ('Set') and a precise resource ('one exact unlinked, undriven scalar/vector/color material input'), making the tool's function immediately clear. It also scopes the operation to 'inside the active transaction,' which helps distinguish it from related material tools like material.assign or material.texture.bind.
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 conveys clear context: this is for raw, unlinked, undriven inputs and must be used within an active transaction. It also notes that shared materials require explicit confirmation. It does not explicitly name alternatives or give when-not-to-use guidance, but the constraints are reasonably inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material.texture.bindBDestructiveIdempotent
Bind one exact local image through generated semantic mapping nodes to a Principled PBR channel. Existing links require an exact replacement guard.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| mapping | No | ||
| node_name | Yes | ||
| image_name | Yes | ||
| coordinates | No | UV | |
| allow_shared | No | ||
| material_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| replace_existing | No | ||
| expected_image_users | Yes | ||
| expected_node_identity | Yes | ||
| expected_image_identity | Yes | ||
| expected_material_users | Yes | ||
| expected_link_identities | No | ||
| expected_scene_generation | Yes | ||
| expected_material_identity | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive and idempotent behavior, so the description mainly adds context beyond them. The statement that 'existing links require an exact replacement guard' warns about replacement behavior and implies that pre-existing connections are affected. It does not fully explain what gets destroyed, but combined with destructiveHint=true this is reasonably 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?
Two short sentences, no filler, key action front-loaded. The first sentence states the operation and target, and the second adds an important constraint. Every word earns its place despite some jargon.
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 complex 17-parameter, 12-required-parameter tool with concurrency guards and identity expectations, this description is far too thin. It gives no guidance on how expected_* identities work, what transaction_id/idempotency_key are for, what mapping or coordinates mean, or when allow_shared/replace_existing should be true. The output schema exists, but the description still leaves an agent guessing about most required inputs.
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 0%, so the description must compensate for 17 parameters and 12 required fields. It provides only broad hints: 'exact local image' maps to image identity parameters, 'Principled PBR channel' maps to channel, and 'replacement guard' hints at expected_link_identities/replace_existing. Most parameters—transaction_id, all expected_* fields, idempotency_key, mapping, coordinates, allow_shared—remain unexplained.
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 ('Bind') and identifies the resource and destination: 'one exact local image' through 'semantic mapping nodes' to a 'Principled PBR channel.' This makes the tool's core function understandable and distinguishes it from generic material setters. However, the phrase 'generated semantic mapping nodes' is jargon and does not clearly separate it from sibling tools like material.set_input or material.texture.clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement about when to use this tool versus alternatives, and no named sibling or exclusion condition. The line 'Existing links require an exact replacement guard' hints at a precondition but does not tell an agent when this tool is appropriate or when to choose material.texture.clear or material.set_input instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material.texture.clearBDestructiveIdempotent
Clear the exact inspected incoming link set from one Principled semantic channel and restore it if the structural transaction rolls back.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| node_name | Yes | ||
| allow_shared | No | ||
| material_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_node_identity | Yes | ||
| expected_material_users | Yes | ||
| expected_link_identities | Yes | ||
| expected_scene_generation | Yes | ||
| expected_material_identity | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive and idempotent, so the description's added value is the rollback-restore behavior and the scoping to an 'exact inspected' link set rather than broad channel clearing. This provides meaningful context beyond the structured annotation fields. No contradiction with annotations exists.
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 compact sentence with no redundant wording, and the main action is front-loaded. Its terseness is a minor weakness because important behavioral and parameter context is omitted, but as a concise sentence it is well-formed.
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 destructive, transactional, 11-parameter operation with optimistic-concurrency expected values, the description is far too incomplete. It does not explain how to obtain the expected identities, that the tool must run within an active transaction, or what 'exact inspected' requires in practice. The presence of an output schema does not compensate for missing invocation guidance.
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?
With schema description coverage at 0%, the description carries the full burden of explaining 11 parameters, but it only hints at 'channel' and 'incoming link set' (expected_link_identities). It does not explain transaction_id, expected_material_identity, expected_node_identity, expected_material_users, expected_scene_generation, idempotency_key, or allow_shared, which are all essential to calling the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action ('clear') on a specific resource ('incoming link set' on a 'Principled semantic channel'), and the sibling tool list includes material.texture.bind, making the intended operation distinguishable. It is clear enough despite depending on domain jargon like 'Principled semantic channel' and 'structural transaction.'
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 no explicit guidance on when to use this tool versus alternatives such as material.set_input or material.texture.bind. The rollback mention implies a transactional context, but it never states 'use inside a transaction' or identifies when this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modifier.set_stateADestructiveIdempotent
Set absolute viewport and/or render enable flags for one exact modifier inside the active transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes | ||
| show_render | No | ||
| modifier_name | Yes | ||
| show_viewport | No | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_object_identity | Yes | ||
| expected_scene_generation | Yes | ||
| expected_modifier_identity | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructive and idempotent behavior. The description adds the 'absolute' set semantics and transaction scope, but it does not explain failure conditions around expected identity/generation, null flag behavior, or interaction with the active transaction.
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 or repetition. Every word adds meaning, naming the operation, target, flag type, and required transaction context.
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?
Even though an output schema exists and covers return values, this is a complex 9-parameter mutation with 7 required fields and identity/idempotency concepts. The description leaves most parameter semantics and behavioral constraints unexplained, so it is not complete enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all 9 parameters. It only hints at show_viewport and show_render through 'viewport/render' and at identity checks through 'one exact modifier'; the required transaction_id, object_name, modifier_name, expected_* fields, and idempotency_key are left unexplained.
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 ('Set') and clearly identifies the resource: absolute viewport and/or render enable flags for one exact modifier within the active transaction. This distinguishes it from related visibility, material, and transform tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'inside the active transaction' conveys a key usage context, and 'one exact modifier' implies the tool operates on a single, precisely identified modifier. It does not name alternatives, but no direct modifier-state sibling exists, so explicit exclusions are not essential here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.createBDestructiveIdempotent
Create one uniquely named bounded primitive, empty, camera, or light in an exact collection inside the active structural transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| definition | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already assert this is mutating (readOnlyHint=false), destructive, and idempotent; the description adds useful context that creation is scoped to an active structural transaction and that names must be unique. It does not, however, explain the destructiveHint — e.g., whether a name collision overwrites an existing object or fails — nor the meaning of the idempotency key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 20-word sentence with every phrase earning its place: the verb, the enumerated object types, the uniqueness constraint, the collection scope, and the transaction requirement are all packed in without redundancy. Given the enormous schema behind this tool, the description is remarkably efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the output schema and annotations covering some ground, the tool is complex: 10 discriminator-driven object definitions and 4 required parameters including an opaque expected_scene_generation (presumably an optimistic-concurrency guard) and idempotency_key. The description covers object-type and transaction basics but leaves an agent unable to correctly populate expected_scene_generation or understand the destructive-collision semantics, which are the highest-risk aspects of calling this 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?
With 0% schema coverage, the description carries the burden, and it does explain the most important parameters: the definition/type choices ('primitive, empty, camera, or light'), the unique name constraint, the collection ('exact collection'), and the transaction context. But two required parameters — idempotency_key and expected_scene_generation — receive no semantic explanation anywhere, so the description only partially compensates for the schema's silence.
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') with a clearly enumerated resource scope (bounded primitive, empty, camera, or light) and adds scoping constraints: a unique name, an exact collection, and an active structural transaction. This inherently separates it from siblings like object.duplicate, object.delete, and object.set, which perform different operations. However, it never explicitly names an alternative tool, so differentiation is implicit rather than stated.
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 'inside the active structural transaction' implies a prerequisite workflow: a transaction must already be open, and creation presumably must be followed by commit or rollback. This is useful context, but the description never explicitly says when to choose object.create over object.duplicate, material.create, or scene.camera.set, nor what happens if no transaction is active.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.deleteBDestructiveIdempotent
Unlink one exact unselected object now, restore it on rollback, or remove the object data-block when the structural transaction commits.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_object_identity | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as write, destructive, and idempotent. The description adds meaningful context beyond those annotations: unlinking happens immediately, rollback restores it, and commit removes the data-block. It also suggests an unselected-object precondition, and it does not contradict any annotation.
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 compact sentence and front-loads the core verb (`Unlink`). There is no wasted wording, though the three-way temporal clause (`now`, `rollback`, `when the structural transaction commits`) is slightly hard 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?
The high parameter count, guard fields, and transaction semantics require more context than the description provides. It does not explain how identity and scene-generation checks work, what idempotency means here, or how `transaction_id` relates to `transaction.begin`/`transaction.commit`, so it is incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and five required parameters, the description should carry parameter meaning. It only gestures at `object` and transaction timing; `expected_object_identity`, `expected_scene_generation`, and `idempotency_key` are left undocumented, so an agent cannot reliably know how to fill them correctly.
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 identifies a concrete action (`unlink` / `remove the object data-block`) on a specific resource (`one exact unselected object`). It reads as a deletion/unlink tool and is distinguishable from siblings like `object.duplicate`, `object.set`, or `object.transform`, though the `unselected` requirement is somewhat opaque.
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 transactional wording (`restore it on rollback`, `when the structural transaction commits`) implies the intended context is inside a transaction, but there is no explicit direction about when to choose this over alternatives or how transaction lifecycle functions relate. Usage guidance is present only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.duplicateADestructiveIdempotent
Duplicate one exact object with linked or independent object data and a unique new name inside the active structural transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| transform | No | ||
| linked_data | No | ||
| source_name | Yes | ||
| transaction_id | Yes | ||
| collection_name | No | ||
| idempotency_key | Yes | ||
| expected_source_identity | Yes | ||
| expected_scene_generation | Yes | ||
| expected_collection_identity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive and idempotent behavior. The description adds useful context about linked vs independent object data and the unique-name requirement, but it does not clarify what destructive means here, whether the source is left unchanged, or how identity expectations are enforced.
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 with no filler. The key action is front-loaded, and the qualifiers about data linking, naming, and transaction scope all earn their 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 10 parameters, 6 required, and 0% schema coverage, this description is too sparse for reliable invocation. While an output schema exists, the complicated expected_* identity semantics and idempotency contract remain undocumented, leaving the agent to guess at important constraints.
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 0%, so the description carries the full burden for parameter meaning. It meaningfully explains linked_data and name, and implies source_name/transaction_id, but it leaves the expected_* fields, collection_name, transform, and idempotency_key unexplained.
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 and resource: "Duplicate one exact object" with a unique new name. It clearly conveys the core operation and distinguishes duplication from sibling tools like object.create or object.delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the operation must happen "inside the active structural transaction," which implies an important prerequisite. However, it does not explicitly describe when to choose this tool over alternatives such as object.create or object.set, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.geometry.inspectARead-onlyIdempotent
Return a bounded evaluated mesh summary without exposing raw vertex or face arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations by noting the result is 'bounded' and 'evaluated', and that raw vertex/face arrays are intentionally withheld. No contradiction 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?
A single, front-loaded sentence that conveys the tool's scope, output nature, and a key limitation with zero filler. 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?
For a single-parameter, read-only inspection tool with a rich output schema and clear annotations, the description is nearly sufficient. It could be more complete by noting how to handle missing objects or by explicitly routing to sibling inspection tools, but the core calling context is well covered.
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 0%, so the description must compensate for parameter meaning, but it does not mention object_name at all. The parameter name and title are self-explanatory, but the description adds no value beyond the schema's own 'Object Name' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and resource ('bounded evaluated mesh summary'), and uses the negative clause 'without exposing raw vertex or face arrays' to clarify exactly what the tool does not return. This distinguishes it from broader inspection tools like object.inspect or scene.inspect.
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 'evaluated mesh summary' gives clear context that this tool is for geometry-level inspection rather than scene-level or lookdev inspection. However, it does not explicitly name alternatives or state when not to use it, so it stops 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.
object.inspectARead-onlyIdempotent
Inspect one exact Blender object without changing user context.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 a meaningful behavioral boundary beyond those annotations: this tool inspects without changing user context. It does not contradict the annotations and provides useful side-effect clarity.
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 one short sentence that front-loads the core action, resource, and the key contextual guarantee. Every word contributes meaning and there is 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?
For a single-parameter, read-only, idempotent inspection tool with an output schema and rich annotations, this description is sufficiently complete. It covers the essential behavior, the exactness of the target object, and the non-mutating nature without needing to restate schema or annotation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds that the tool operates on 'one exact Blender object', implying object_name is an exact, context-independent identifier rather than a fuzzy or selected target. This adds some meaning beyond the schema title 'Object Name', but it does not document format, naming conventions, or edge cases.
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 ('Inspect'), a clear resource ('one exact Blender object'), and an important scoping condition ('without changing user context'). It does not explicitly name sibling tools like object.geometry.inspect or object.lookdev.inspect, but the phrase 'one exact object' helps distinguish it from broader or more specialized inspection tools.
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 read-only inspection use case and emphasizes that user context is not changed, which is useful guidance. However, it does not explicitly state when to prefer this tool over alternatives such as object.geometry.inspect, scene.inspect, or context.get, and it gives no exclusions or routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.lookdev.inspectARead-onlyIdempotent
List bounded object-local visibility, modifier, shape-key, and material-slot targets with session identities for safe preview writes.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful scoping context: 'bounded object-local' and 'session identities for safe preview writes'. No contradiction 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?
A single, dense, front-loaded sentence with no filler. Some terms like 'bounded' and 'session identities' are compact and slightly jargon-heavy, but the description stays 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 one-parameter, read-only tool with output schema and annotations, this is mostly complete: it identifies the target object, the categories inspected, and the preview-write use case. Missing details are the meaning of 'bounded' and 'session identities', and alternative-tool routing.
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 0%, so the description must compensate. The single object_name parameter is self-explanatory and the word 'object-local' ties it to the target object, but the description does not explain what constitutes a valid object or how the name should be supplied.
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 ('List') and names concrete target categories: visibility, modifier, shape-key, and material-slot targets. 'Object-local' and 'bounded' clarify scope, distinguishing it from generic sibling tools like object.inspect and scene.inspect.
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 'for safe preview writes' implies when to use it, but there is no explicit guidance about alternatives or when not to use this tool. Given siblings like object.inspect, material.inspect, and lookdev.compare, more explicit routing would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.setADestructiveIdempotent
Atomically apply typed transform, visibility, Light, and Camera settings to one exact object inside the active transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| patches | Yes | ||
| object_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_object_identity | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnly=false, and openWorld=false, so the description does not need to restate those. It adds value by disclosing atomicity, the active-transaction requirement, and that the operation targets exactly one object rather than a selection or scene-wide scope.
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 with the core action front-loaded: 'Atomically apply'. Every phrase earns its place by adding scope, target, transaction context, or the kinds of settings involved.
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 six required parameters and a complex nested patch schema, the description is quite terse. It conveys atomicity and transaction context but leaves expected_* and idempotency semantics to be inferred from parameter names, which may be insufficient for reliable invocation. An output schema exists, so return values are not the issue, but preconditions and concurrency-failure behavior are not disclosed.
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 0%, so the description must compensate for the six required parameters. It mentions 'one exact object' and 'inside the active transaction', which loosely maps to object_name and transaction_id, but it does not explain the roles of expected_object_identity, expected_scene_generation, or idempotency_key, all of which carry important concurrency and retry semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('apply'), a clear resource ('one exact object'), and enumerates the setting categories involved: transform, visibility, Light, and Camera. It does not explicitly contrast itself with sibling tools like object.transform, object.visibility.set, or scene.camera.set, but its combined atomic scope makes its purpose reasonably distinct.
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 'inside the active transaction' conveys that this tool operates on transaction state, which is a useful context cue. However, it does not say when to prefer object.set over more specialized siblings like object.transform or object.visibility.set, nor does it mention exclusions or prerequisites such as requiring transaction.begin to have been called.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.transformCDestructiveIdempotent
Set one or more local object scale axes to absolute values inside the active transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | ||
| location | No | ||
| object_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| rotation_euler_degrees | No | ||
| expected_object_identity | No | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the description only needs to add context. It does add that changes are absolute and transaction-scoped, which reinforces mutation semantics. However, it does not clarify what 'destructive' means in practice, such as which existing values are overwritten or how expected_scene_generation participates in safety.
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 efficient sentence with no filler or redundant statements. It is front-loaded with the main action. The brevity is a strength, though it sacrifices important coverage of the tool's full 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?
Given the tool's complexity — 8 parameters, 4 required fields, nested patch objects, and multiple transform aspects — the description is incomplete. It omits location and rotation entirely and does not explain the required transaction/idempotency/generation semantics. An output schema exists, so return-value details are less critical, but the tool still needs more context to be called correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It only hints at the scale patch fields and says nothing about location, rotation_euler_degrees, transaction_id, idempotency_key, expected_scene_generation, or expected_object_identity. This leaves most parameter semantics undefined for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action and resource ('Set one or more local object scale axes'), but it only mentions scale, while the schema also supports location and rotation_euler_degrees. This makes the description misleading for an agent trying to understand the actual scope of object.transform, and it does not clearly distinguish the tool from sibling setters like object.set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as object.set or object.visibility.set. The phrase 'inside the active transaction' provides context, but it does not explain prerequisites, exclusions, or why an agent would choose object.transform over another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object.visibility.setADestructiveIdempotent
Set absolute object viewport and/or render visibility flags inside the active transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| hide_render | No | ||
| object_name | Yes | ||
| hide_viewport | No | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_object_identity | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and destructive hints. The description adds meaningful behavior by specifying 'absolute' flag setting and restricting changes to the active transaction, which implies changes are not final until commit. There is no contradiction with 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, front-loaded sentence with no filler. It packs the action, scope, and transactional context efficiently.
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 seven parameters and five required, the description omits important context: what null means for each visibility flag, why expected_object_identity and expected_scene_generation are required, and how the idempotency key should be used. The output schema does not fill these semantic gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the seven parameters. It mentions viewport/render visibility flags, roughly mapping to hide_viewport and hide_render, but it fails to explain null semantics, the meaning of true/false, or the roles of expected_object_identity, expected_scene_generation, and idempotency_key.
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 ('Set') plus a clear resource ('object viewport and/or render visibility flags'), and 'absolute' clarifies that this is a direct assignment rather than a toggle. This distinguishes it from broader siblings like object.set and object.delete.
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 'inside the active transaction' clearly tells the agent this tool must be used within an open transaction, after transaction.begin and before commit. However, it does not name alternatives or explicitly state when not to use it, so it stops short of full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
observation.bundleCRead-onlyIdempotent
Capture one to three consistent semantic views with before/after context and object evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | ||
| max_size | No | ||
| overlays | No | CURRENT | |
| object_name | Yes | ||
| viewport_id | No | ||
| display_mode | No | CURRENT |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds some behavioral context beyond annotations by mentioning 'before/after context' and 'consistent semantic views,' but it does not explain what 'object evidence' means or what the captured output contains.
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. It conveys the core action and key qualifiers efficiently, though the phrase 'semantic views' and 'object evidence' are somewhat abstract and could be clearer.
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 no output schema, the description should explain what the tool returns, but it does not. It also omits important behavioral details around the six parameters, the meaning of 'before/after context,' and how this bundle differs from a simple viewport capture. The presence of read-only and idempotent annotations helps, but the missing output and parameter semantics leave notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It adds partial meaning: 'one to three' maps to the views array constraints and 'object evidence' hints at object_name, but it provides no guidance on max_size, overlays, viewport_id, or display_mode, which remain unexplained.
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 ('Capture') and names a defined resource ('one to three consistent semantic views') along with meaningful qualifiers ('before/after context and object evidence'). It gives a clear idea of what the tool produces, though it does not explicitly name sibling tools to differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus siblings like viewport.capture, context.snapshot, or object.inspect. There are no stated conditions, exclusions, or references to alternative tools, leaving the agent to infer when observation.bundle is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project.openADestructiveIdempotent
Open an existing absolute .blend path on the next main-thread tick. By default the current transaction is committed and dirty current project is saved.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| load_ui | No | ||
| use_scripts | No | ||
| save_current | No | ||
| save_current_as | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructive/read-only/idempotent hints, so the description only needs to add extra behavioral context. It does so by disclosing the next-tick execution, default transaction commit, and dirty-project saving behavior. There is no contradiction with 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 two tight sentences with no filler. It front-loads the primary action and then states the important default side effects, which is an efficient structure for an agent-facing tool definition.
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 having an output schema, the tool has five parameters and zero schema description coverage. The description fails to explain key optional parameters such as load_ui, use_scripts, and save_current_as, and it does not guide the agent toward or away from sibling project tools. This is not fully complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter-meaning burden. It only explains path ('absolute .blend path') and partially touches save_current via the default-save behavior. load_ui, use_scripts, and save_current_as are left undocumented in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Open'), a specific resource ('existing absolute .blend path'), and a concrete scheduling detail ('on the next main-thread tick'). This clearly distinguishes project.open from siblings like project.reload or project.save and is not a tautology.
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 when to use the tool: to open an existing .blend file while committing the current transaction and saving the dirty project. However, it does not explicitly name alternatives, exclusions, or conditions under which another sibling tool such as project.reload should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project.reloadADestructiveIdempotent
Reload the current saved .blend file on the next main-thread tick. Unsaved changes are discarded unless save_current is true.
| Name | Required | Description | Default |
|---|---|---|---|
| load_ui | No | ||
| use_scripts | No | ||
| save_current | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool destructive and idempotent, and the description adds meaningful detail: unsaved changes are discarded unless save_current is true, and the operation is deferred to the main-thread tick. No contradiction 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?
Two sentences carry all essential information: the action and timing are front-loaded, and the destructive warning is concise and clear. No redundant wording.
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 relatively simple and an output schema exists, so return-value documentation is not needed. However, the description covers only one of three parameters and does not fully explain the deferred reload mechanism's implications, leaving noticeable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all parameters. It only explains save_current, leaving load_ui and use_scripts semantically unexplained. Their names and defaults offer some hints, but the tool does not describe their behavioral impact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Reload'), a specific resource ('current saved .blend file'), and a precise scheduling detail ('on the next main-thread tick'). It clearly distinguishes this from sibling tools like project.save and project.open.
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: this tool reverts to the last saved state, and using save_current=true preserves unsaved changes. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough for an agent to infer when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project.saveADestructiveIdempotent
Commit the active transaction and save the current project, optionally using an absolute Save As path. Existing targets are overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive and non-read-only behavior; the description adds specificity by disclosing that existing targets are overwritten and that the tool commits an active transaction. This complements, rather than merely repeats, the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the primary action and optional path are front-loaded, and the important overwrite behavior is stated immediately after. No filler or redundant restatement of the tool name.
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 one optional parameter, an output schema, and annotations covering safety, the description covers the essential call semantics. The only modest gap is the behavior when no active transaction exists, which is implied but not spelled out.
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?
With 0% schema description coverage, the description must explain the lone path parameter. It does so meaningfully by identifying it as an optional absolute Save As path, which disambiguates its role and format beyond the bare string/null 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 states a concrete action and resource: it commits the active transaction and saves the current project, with optional Save As behavior. This clearly distinguishes it from project.open, project.reload, render.save, and transaction.commit within the sibling set.
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 establishes when to use the tool (when you want to persist the project and commit the active transaction) and even covers the Save As variant. It does not explicitly name alternative tools or exclusion conditions, so it stops 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.
project.statusARead-onlyIdempotent
Read the current Blender project path, dirty state, generation, transaction, and most recent lifecycle operation without requiring a 3D viewport.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint true; the description adds value by listing the exact data points read and noting that no 3D viewport is required. It does not contradict the annotations and gives behavioral context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and resource, then lists specific fields concisely. There is no filler or redundant explanation.
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 status tool, the description is complete. It names the exact information available, states the no-viewport condition, and safety is already covered by annotations; the output schema handles return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so no clarification is needed. The description's explicit list of properties confirms that the tool takes no arguments and merely reads fixed project attributes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and a well-defined resource: the current Blender project path, dirty state, generation, transaction, and most recent lifecycle operation. This clearly scopes it to project-level status and differentiates it from siblings like application.status by naming project-specific fields.
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 this tool is for reading project state and explicitly notes it works without a 3D viewport, which is useful context. However, it does not name alternatives (e.g., application.status) or provide when-not-to-use guidance, leaving usage selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render.previewAIdempotent
Render one exact Camera with temporary bounded Eevee Next settings, return PNG evidence, and restore all camera and render settings.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | ||
| height | Yes | ||
| samples | Yes | ||
| camera_name | Yes | ||
| transparent | No | ||
| idempotency_key | Yes | ||
| expected_camera_identity | Yes | ||
| expected_scene_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that settings are temporary, that all camera and render settings are restored afterward, and that the return value is PNG evidence. This makes the mutation/side-effect profile clear despite readOnlyHint being false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the primary action, states the output, and closes with the restoration guarantee. There is no filler or repetition; every clause adds useful 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?
For a tool with severe complexity—8 parameters, no schema descriptions, no output schema, and no parameter-level guidance—the description is not complete enough. The agent cannot determine how to obtain expected_camera_identity or expected_scene_generation, what idempotency_key is for, or what happens on mismatch or failure.
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?
With 0% schema description coverage and 8 parameters, the description would need to compensate, but it does not explain critical parameters like expected_camera_identity, expected_scene_generation, or idempotencyekey. It only vaguely covers rendering parameters as 'temporary bounded Settings'; the guard/verification parameters remain unexplained
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'), a clear resource ('one exact Camera'), and specifies the temporary render mode, the PNG evidence return, and the restoration of settings. This clearly distinguishes it from siblings like render.save or viewport.capture without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: it is a preview render that produces temporary PNG evidence and restores settings. However, it never explicitly says when to use this tool instead of render.save or viewport.capture, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render.saveADestructiveIdempotent
Render one exact Camera with bounded Eevee Next settings and overwrite an absolute PNG or EXR output path whose parent already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| width | Yes | ||
| height | Yes | ||
| samples | Yes | ||
| camera_name | Yes | ||
| transparent | No | ||
| idempotency_key | Yes | ||
| expected_camera_identity | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint and destructiveHint, and the description reinforces the destructive nature with 'overwrite'. It adds genuinely new behavioral details: engine ('Eevee Next'), exact-camera guarantee, output formats (PNG or EXR), absolute path requirement, and the parent-directory prerequisite. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence conveys the tool's purpose, scope, constraints, and output side effects without any filler. Each clause adds distinct information: the camera selection, bounded settings, write mode, path form, formats, and prerequisite. This is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema mitigates return-value concerns, but the input side is incomplete. With 9 parameters and no schema descriptions, a render/save tool that is destructive and guarded by expected_* fields needs more explanation for idempotency_key, expected_camera_identity, and expected_scene_generation. The description covers the general output behavior but not the safety/versioning semantics required to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies the meaning of path (absolute, parent exists, PNG/EXR), camera_name (exact camera), and the bounded settings (width/height/samples). However, it does not explain the required parameters expected_camera_identity, expected_scene_generation, or idempotency_key, leaving a meaningful gap.
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 is specific and action-oriented: 'Render one exact Camera' names the verb and resource, and the rest clarifies the output behavior ('overwrite an absolute PNG or EXR output path'). This implicitly distinguishes it from siblings like render.preview and viewport.capture, which target previews or viewports rather than a file write, though it never references an alternative by name.
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 usage context: it renders a specific camera, uses bounded Eevee Next settings, and requires an absolute path whose parent already exists. This effectively tells the agent when the tool is appropriate and what must hold before calling it. It does not explicitly discuss exclusions or alternatives, hence not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene.camera.setADestructiveIdempotent
Set one exact Camera object as the active scene camera inside the structural transaction and restore the previous camera on rollback.
| Name | Required | Description | Default |
|---|---|---|---|
| camera_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_camera_identity | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and is destructive/idempotent. The description adds meaningful transactional behavior: the active camera is changed and the previous camera is restored on rollback. It could further describe failure behavior around expected identity or generation, but the rollback semantics are a valuable addition 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 one sentence with no filler. The primary action is front-loaded and the rollback consequence is stated immediately, making it easy to scan and 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?
The description is adequate for selecting the tool and understanding its transaction/rollback nature, especially with annotations and an output schema present. However, it leaves key invocation details undocumented, particularly how to obtain or satisfy the expected_camera_identity and expected_scene_generation, and what 'structural transaction' entails. This is a minimum-viable description with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not. It only hints at camera_name and transaction context; expected_camera_identity, expected_scene_generation, and idempotency_key remain unexplained. With five required parameters, this is a significant gap.
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 and resource: 'Set one exact Camera object as the active scene camera.' It also clearly distinguishes this from broader sibling operations like object.set or world.set by focusing on the scene camera and the exactness of the identity. The rollback behavior is stated without ambiguity.
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 states the operation happens 'inside the structural transaction,' and clarifies what happens on rollback. It does not name alternatives or give exclusions, but the context is clear enough for an agent to know this is the tool for changing the active scene camera within a transaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene.inspectBRead-onlyIdempotent
Return bounded scene objects, collections, materials, images, world, active camera, and render summaries with session-local identities.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | Yes | ||
| limit | No | ||
| name_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive behavior, so the description only needs to add extra behavioral context. It adds 'bounded', 'summaries', and 'session-local identities', which clarify that results are constrained, summarized, and use ephemeral session-scoped identifiers. No contradiction 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?
One tightly packed sentence with no filler. It front-loads the verb and resource, and every qualifier ('bounded', 'summaries', 'session-local identities') adds semantic value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description is mostly complete for basic invocation. However, it leaves parameter semantics and sibling-tool routing unaddressed, so an agent may not know how filtering or limits shape the result or when a per-kind inspector is more appropriate.
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 0%, so the description must compensate for parameter meaning. It enumerates the kinds values, but does not explain `limit` or `name_filter` semantics, how they interact, or what defaults apply. The schema provides constraints, but the description adds little beyond restating the enum categories.
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 names a concrete verb and resource: returns scene objects, collections, materials, images, world, camera, and render summaries. It adds 'bounded' and 'session-local identities' to characterize the result. It does not explicitly distinguish itself from sibling inspectors like object.inspect or material.inspect, though the breadth is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use scene.inspect versus object.inspect, material.inspect, image.inspect, or other scene-level tools. The word 'summaries' weakly implies a listing/inspection role, but no explicit when-to-use or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shape_key.set_valueADestructiveIdempotent
Set one exact non-Basis, non-driven mesh shape key to an absolute value inside the active transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| object_name | Yes | ||
| shape_key_name | Yes | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_object_identity | Yes | ||
| expected_scene_generation | Yes | ||
| expected_shape_key_identity | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, destructiveHint=true, and idempotentHint=true. The description adds meaningful context beyond those hints by specifying the exact shape-key constraints and requiring an active transaction. It accurately aligns with the annotations and clarifies that this is a mutating, transactional value 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 focused sentence with no redundant words. It front-loads the action and resource, then adds the key constraints. Every phrase 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?
For a destructive, idempotent mutation with eight required parameters and zero schema descriptions, the description is too thin. It does not explain the expected-identity concurrency mechanism, idempotency semantics, or consequences of the destructive hint, leaving significant gaps for an agent attempting correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for explaining the eight required parameters. It only implicitly maps to transaction_id, object_name, shape_key_name, and value; it leaves expected_object_identity, expected_shape_key_identity, expected_scene_generation, and idempotency_key completely unexplained, which an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('set'), a precise resource ('one exact non-Basis, non-driven mesh shape key'), and the semantics ('absolute value inside the active transaction'). It clearly distinguishes this tool from broader siblings like object.set and material.set_input.
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 conveys clear usage context: the operation requires an active transaction and applies only to non-Basis, non-driven shape keys. It does not explicitly mention alternative tools or when not to use it, but the scoping is strong enough for an agent to recognize the intended situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transaction.beginCDestructiveIdempotent
Begin the single reversible preview transaction for this Blender instance.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| viewport_id | No | ||
| idempotency_key | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds that the transaction is 'single', 'reversible', and 'preview'-oriented, which gives useful context beyond the annotations. However, it does not explain what happens if a transaction is already active or how idempotency is enforced; no contradiction with annotations exists.
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 words. Every term contributes to the core action and scope, making it easy to parse quickly.
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 having annotations and an output schema, the description omits critical operational context: the meaning of expected_scene_generation, the role of idempotency_key, and how this transaction relates to commit/rollback. For a mutating tool with required parameters and a destructive hint, this is a significant completeness 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?
Schema description coverage is 0%, and the description says nothing about the four parameters: label, viewport_id, idempotency_key, and expected_scene_generation. An agent cannot infer the meaning of expected_scene_generation or how to generate a correct idempotency key from the description alone, so the description fails to compensate for missing schema docs.
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 ('Begin') with a clear resource ('reversible preview transaction') and scope ('for this Blender instance'). It distinguishes itself from transaction.commit and transaction.rollback by naming the action as beginning, though it does not explicitly reference those 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?
There is no guidance on when to begin the transaction versus when to use commit/rollback, nor any mention of prerequisites such as matching expected_scene_generation or ensuring no existing transaction. The only usage signal is the verb 'Begin', which is insufficient for an agent to sequence actions correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transaction.commitADestructiveIdempotent
End a transaction while retaining its changes in the current Blender session. This never saves the blend file.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behavioral facts: changes are retained only in the current session, and the blend file is not saved. This adds meaningful side-effect context beyond the destructiveHint and idempotentHint annotations. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action is front-loaded, and the important limitation about saving is stated separately. Every clause contributes to understanding the tool.
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 is too thin for a three-required-parameter transaction operation. It does not explain how expected_scene_generation is used, what idempotency_key guarantees, or what happens if the transaction is invalid or already committed. The output schema may cover return values, but the missing parameter semantics and lifecycle guidance leave significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate, but it does not mention transaction_id, idempotency_key, or expected_scene_generation at all. While the names are suggestive, the critical semantics of expected_scene_generation and idempotency protection are left unexplained.
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 ('End'), a clear resource ('a transaction'), and states the outcome ('retaining its changes in the current Blender session'). The added clarification that it 'never saves the blend file' distinguishes commit from persistence operations and from transaction.rollback, which discards changes.
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 right context: commit when you want to end a transaction and keep its changes, and not roll back. It does not explicitly contrast with transaction.rollback or mention that a transaction must first be opened via transaction.begin, but the intent is clear enough for basic routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transaction.rollbackCDestructiveIdempotent
Restore transaction property deltas and the captured user context.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| expected_scene_generation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds that both property deltas and the captured user context are restored, which is useful behavioral context. However, it doesn't explain what happens to the transaction lifecycle, whether a rollback can be reversed, or failure behavior in an open-world scene.
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 one concise sentence with no filler and is easy to parse. It could be slightly more informative, but as far as structure and economy of language, it 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?
Even though an output schema exists and annotations carry some safety signals, the description leaves out important contextual information: when to roll back, what the three required parameters mean, and how this relates to transaction.begin/commit/context.restore. For a destructive transaction operation, this is not complete enough.
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 0%, and the description does not compensate. It never explains transaction_id, expected_scene_generation, or idempotency_key, nor how they relate to the restoration process. This is a critical gap for correct invocation.
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, 'Restore', and names the resource: transaction property deltas and the captured user context. This distinguishes it from transaction.begin and transaction.commit at a basic level, but it doesn't explicitly contrast it with context.restore or transaction.commit, so it's clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool as opposed to transaction.commit or context.restore. The phrase 'restore transaction property deltas' implies a rollback operation, but no prerequisites, conditions, or alternative tool mentions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewport.captureARead-onlyIdempotent
Temporarily frame an object from a semantic view, capture the 3D editor, and restore the user's context.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | CURRENT | |
| orbit | No | ||
| max_size | No | ||
| overlays | No | CURRENT | |
| object_name | Yes | ||
| viewport_id | No | ||
| display_mode | No | CURRENT |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, idempotent, and non-destructive hints. The description adds valuable behavioral context beyond those: viewport framing is temporary and user context is restored after capture. It does not detail the exact output or possible side effects on viewport_id, so it's not a full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise, front-loaded sentence with zero waste. It captures the core sequence of actions without redundant elaboration.
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 main purpose and context restauration but is silent on return semantics of the capture, the meaning of viewport_id and other parameters, and how 'semantic view' relates to the view enum. No output schema exists, so the description would need to explain capture output; it does not.
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 0%, so the description is expected to compensate with parameter meaning. It does not mention any parameter, though the schema names and enums are mostly self-descriptive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific multi-step action: temporarily frame an object, capture the 3D editor, then restore context. The verb and resource are clear and it distinguishes itself from viewport siblings like viewport.raycast by describing capture rather than raycast.
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 non-disruptive viewport capture by highlighting the temporary framing and context restauration. However, it does not explicitly name alternatives or state when-not-to-use, leaving sibling differentiation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewport.raycastARead-onlyIdempotent
Resolve a normalized image coordinate against the evaluated Blender geometry represented by a prior viewport capture.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| capture_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is read-only and idempotent, so the description does not need to cover safety. It does add context about normalized image coordinates and evaluated geometry, but it does not disclose behavior for invalid capture_id, missing geometry, or raycast misses. That is a meaningful but incomplete behavioral picture.
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 one tightly worded sentence with no filler. The key operational idea is front-loaded, and every phrase 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 tool's simple input set, existing annotations, and presence of an output schema, the description is mostly complete. The main missing piece is an explicit statement that a viewport.capture must be performed first and its id reused here; 'prior viewport capture' only implies this.
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 0%, so the description must compensate for the schema's lack of per-parameter text. It does clarify that x and y form a normalized image coordinate and that capture_id refers to a prior viewport capture, but it leaves out details like coordinate origin and how to obtain a valid capture_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Resolve') and a specific resource ('a normalized image coordinate against evaluated Blender geometry represented by a prior viewport capture'). This clearly separates it from capture and inspection tools that do not raycast against a previously captured viewport.
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 'prior viewport capture' implies the tool should be used after viewport.capture, but the description never explicitly states that dependency or mentions when to prefer this tool over alternatives like object.geometry.inspect or scene.inspect. The usage context is clear but the when/when-not guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
world.setBDestructiveIdempotent
Create or modify the current World background and an optional exact local environment image inside the active structural transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | ||
| strength | No | ||
| allow_shared | No | ||
| transaction_id | Yes | ||
| idempotency_key | Yes | ||
| rotation_z_degrees | No | ||
| expected_world_users | No | ||
| environment_image_name | No | ||
| expected_world_identity | No | ||
| expected_scene_generation | Yes | ||
| expected_environment_image_users | No | ||
| expected_environment_image_identity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as non-read-only, idempotent, and destructive, and the description does not contradict them. The description adds useful transaction-scoping behavior, but does not explain destructive consequences, concurrency expectations, or failure modes beyond the schema's expected_* fields.
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. It efficiently communicates the core action, target resources, and transaction requirement, though it is slightly compressed given the complexity of the tool.
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 12 parameters, zero schema descriptions, and a transaction-based API, the description is incomplete. It omits how expected_* fields work, what 'exact local environment image' means, and how the transaction lifecycle constrains invocation. The presence of an output schema helps with return values but not with input semantics.
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 0%, so the description had to compensate for explaining 12 parameters. It only gestures at 'World background' and 'environment image', while required fields like transaction_id, expected_scene_generation, idempotency_key, and the expected_* optimistic concurrency fields remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Create or modify') on a distinguishable resource ('current World background' and 'optional exact local environment image'). This is enough to set the tool apart from generic object/scene tools like object.set or scene.camera.set. However, 'exact local environment image' is domain-specific and not fully explained.
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 'inside the active structural transaction' gives an explicit context constraint: this must be called within a transaction lifecycle, likely between begin and commit/rollback. It does not state exclusions, when not to use it, or which sibling tools would be better for related but different operations.
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.
42 tool updates
v0.9.0- First observed
application.launch - First observed
application.quit - First observed
application.status - First observed
connection.ping - First observed
context.get - First observed
context.restore - First observed
context.snapshot - First observed
image.inspect - First observed
image.load - First observed
lookdev.compare - First observed
material.assign - First observed
material.create - First observed
material.inspect - First observed
material.set_input - First observed
material.texture.bind - First observed
material.texture.clear - First observed
modifier.set_state - First observed
object.create - First observed
object.delete - First observed
object.duplicate - First observed
object.geometry.inspect - First observed
object.inspect - First observed
object.lookdev.inspect - First observed
object.set - First observed
object.transform - First observed
object.visibility.set - First observed
observation.bundle - First observed
project.open - First observed
project.reload - First observed
project.save - First observed
project.status - First observed
render.preview - First observed
render.save - First observed
scene.camera.set - First observed
scene.inspect - First observed
shape_key.set_value - First observed
transaction.begin - First observed
transaction.commit - First observed
transaction.rollback - First observed
viewport.capture - First observed
viewport.raycast - First observed
world.set
TDQS
Scored across 42 tools
The hierarchical domain prefixes make most tools easy to distinguish, and inspect vs. action tools are generally clear. However, object.set overlaps with object.transform and object.visibility.set, while application.status and connection.ping have ambiguous boundaries.
Most tools follow a predictable lowercase dotted prefix.action or prefix.subdomain.action pattern. Minor inconsistencies exist: object.visibility.set places the verb last, while modifier.set_state, shape_key.set_value, and material.set_input use compound verb_noun actions.
42 tools far exceeds the 25+ threshold and feels heavy for even a broad Blender domain. Several status and inspection tools could be consolidated without losing capability.
The tool surface covers project, object, material, texture, image, lookdev, render, and transaction workflows with few dead ends. Obvious gaps include material/image deletion, collection management, and explicit object selection mutation.
Maintenance
Related MCP Connectors
Cloud Blender for AI agents: scenes, assets, renders, MP4, STL, GLB — over hosted remote MCP.
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Durable, shareable and governed project memory with smart triage and explicit project composition.
Machine-native research commons for agent evidence, discovery, rooms, and bounded research quests.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables natural language creation and refinement of Blender scenes through structured MCP tools, with persistent object identity, visual validation, and reversible edits.MIT
- AlicenseBqualityBmaintenanceEnables LLMs to plan and stage editable Blender scene animations via a typed ShotSpec, with a safe stage/review/apply workflow, scene scanning, locomotion planning, and MCP integration for Codex/ChatGPT clients.17GPL 3.0
- AlicenseAqualityCmaintenanceEnables AI-driven 3D modeling in Blender by providing tools to create primitives, apply modifiers and materials, set up lighting and cameras, capture viewport snapshots, export assets, inspect scenes, and execute Python commands via natural language.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables any MCP client to drive Blender 5.2 LTS through natural language, with tools for scene inspection, object creation and transformation, material and modifier handling, rendering, viewport capture, and guarded Python execution.2MIT