Skip to main content
Glama
pzfreo

build123d-mcp

build123d-mcp

PyPI version Python CI License: MIT

一个 MCP(模型上下文协议)服务器,将 build123d CAD 操作公开为工具,使 AI 助手能够以交互方式构建、检查和迭代 3D 几何体。

为什么使用它

当使用 AI 编写 build123d 脚本时,AI 是“盲写”的——它无法看到自己生成的几何体。该服务器闭合了反馈循环:AI 可以增量地创建几何体、渲染视图、查询尺寸并捕获错误,而不是编写完整的脚本并祈祷它们是正确的。

Related MCP server: 3D MCP Server

工具

  • execute — 在持久会话中运行 build123d Python 代码;使用 show(shape, name) 注册命名部件

  • render_view — 将一个或多个形状渲染为 PNG 或 SVG;支持装配体合成、高质量细分和横截面裁剪平面

  • measure — 查询边界框、体积、表面积、拓扑结构、最小壁厚或两个命名实体之间的间隙

  • export — 在一次调用中导出为 STEP、STL 或两者;针对命名对象或当前形状

  • session_state — 活动形状、命名对象和快照名称的完整 JSON 快照

  • health_check — 在开始工作前验证 VTK/SVG/STEP/STL 依赖项是否端到端正常工作

  • save_snapshot / restore_snapshot / diff_snapshot — 对几何状态进行检查点设置、恢复和比较

  • interference — 检查两个命名形状之间的相交体积

  • list_objects — 列出所有带有几何统计信息的命名形状

  • version — 返回服务器版本

  • reset — 将会话重置为空状态

请参阅 llms.md 获取完整的工具参考和使用模式。

要求

  • uv

  • 兼容 MCP 的客户端(Claude Code、Claude Desktop、Cursor 等)

所有 Python 依赖项(build123d、vtk 等)均由 uv 自动安装。

安装

无需克隆。直接从 PyPI 安装:

pip install build123d-mcp

或者直接使用 uv tool run — 它可以在无需预先安装的情况下一步获取并运行包(见下文)。


添加到 MCP 客户端

服务器通过 stdio 运行 — 客户端使用 uv tool run build123d-mcp 将其作为子进程启动。

关于 Python 版本的说明。 下面的所有示例都传递了 --python 3.12。VTK 和 cadquery-ocp 尚未发布适用于 Python 3.13+ 的 wheel,因此必须固定为 3.12。如果您还没有 Python 3.12,uv 将自动下载一个托管的 Python 3.12。

Claude Code

添加到项目的 .mcp.json(或全局使用的 ~/.claude/mcp.json):

{
  "mcpServers": {
    "build123d-mcp": {
      "command": "uv",
      "args": ["tool", "run", "--python", "3.12", "build123d-mcp"]
    }
  }
}

编辑后重启 Claude Code。连接后工具会自动出现。

Claude Desktop

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) 或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "build123d-mcp": {
      "command": "uv",
      "args": ["tool", "run", "--python", "3.12", "build123d-mcp"]
    }
  }
}

保存后重启 Claude Desktop。

Cursor

打开 Settings → MCP 并添加新的服务器条目,或编辑 ~/.cursor/mcp.json

{
  "mcpServers": {
    "build123d-mcp": {
      "command": "uv",
      "args": ["tool", "run", "--python", "3.12", "build123d-mcp"]
    }
  }
}

VS Code (GitHub Copilot / Continue)

对于 Continue 扩展,添加到 .continue/config.json

{
  "mcpServers": [
    {
      "name": "build123d-mcp",
      "command": "uv",
      "args": ["tool", "run", "--python", "3.12", "build123d-mcp"]
    }
  ]
}

对于支持 MCP 的 GitHub Copilot,添加到工作区中的 .vscode/mcp.json

{
  "servers": {
    "build123d-mcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["tool", "run", "--python", "3.12", "build123d-mcp"]
    }
  }
}

系统提示词

为获得最佳效果,请将 default_prompt.md 的内容作为系统提示词粘贴到您的 AI 客户端中。这会告诉助手以增量方式工作,在每一步之后验证几何体,并按正确的顺序使用工具。


状态

活跃开发中 (v0.1.0)。

Available Tools

38 tools
analyze_printabilityA
Read-only

Analyse a build123d shape for FDM printability using augura (BREP-exact analysis).

Checks: overhangs, manifold/watertight, tip-over risk, brim/raft need,
minimum vertical feature (→ max layer height), and thin walls. Optionally
checks bed-fit against a declared build volume.

Returns a plain-text summary followed by a JSON report with per-finding
detail (kind, severity, message, area/location where applicable).

object_name: named object from show() (default: current shape).
support_angle: faces shallower than this many degrees from horizontal need
    support (default 45).
nozzle: nozzle diameter in mm for wall-thickness check (default 0.4).
min_perimeters: walls thinner than min_perimeters × nozzle are flagged
    (default 2).
build_volume: optional build envelope as 'X Y Z' in mm, e.g. '256 256 256';
    omit to skip the bed-fit check.
bed_tol: Z tolerance in mm for identifying bed-contact faces (default 0.001);
    raise it for parts whose bottom faces sit slightly off Z=0.
min_feature: minimum vertical feature size in mm to flag (default 0.5).
ParametersJSON Schema
NameRequiredDescriptionDefault
nozzleNo
bed_tolNo
min_featureNo
object_nameNo
build_volumeNo
support_angleNo
min_perimetersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, which is consistent with the description (no mention of side effects). The description details the output format (plain-text summary + JSON report) and explains the behavior of each parameter, adding transparency 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.

Conciseness4/5

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

The description is well-structured with an introductory sentence, a bullet-like list of checks, output format, and parameter details. It is somewhat lengthy but every sentence adds value. Minor redundancy could be trimmed, but overall it is clear and organized.

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

Completeness5/5

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

Given the tool complexity (7 parameters, output schema present, no required params), the description covers all aspects: purpose, checks, output, and detailed parameter explanations. It provides sufficient context for an AI agent to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description fully compensates by explaining each parameter's purpose, default, and format (e.g., build_volume as 'X Y Z' string). It adds clear semantic meaning that the schema alone lacks.

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

Purpose5/5

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

The description clearly states the tool's purpose: analyzing a build123d shape for FDM printability using augura. It lists specific checks (overhangs, manifold/watertight, etc.), distinguishing it from sibling analysis tools like design_audit or health_check which have different scopes.

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

Usage Guidelines4/5

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

The description outlines when to use the tool (for FDM printability analysis) and lists the checks performed. It does not explicitly mention when not to use it or alternatives, but the specialized focus implies appropriate usage. It provides enough context for an AI agent to decide.

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

compareA
Read-only

Unified comparison tool.

kind='shape' compares two named shapes from show(), a and b, by
volume/bbox/topology and localized surface deviation; b is required.

kind='fit' reports the spatial relationship between two named shapes, a and b:
clearance, apart/touching/containing/interpenetrating status, containment,
and overlap volumes; b is required.

kind='align' checks two named shapes, a and b, along one axis. axis: X, Y, or Z.
mode: flush (bbox extreme offset), center (centroid offset), or clearance
(nearest-face gap); b is required.

kind='snapshot' compares snapshot a against the current session state
or b as a second snapshot. format: 'text' or 'json'.
ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bNo
axisNoZ
kindNoshape
modeNoflush
formatNotext

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

The annotations set readOnlyHint=true, and the description does not contradict this. The description implies the tool observes state without modifying it, but does not explicitly state that there are no side effects or any other behavioral traits. With annotations already providing the safety profile, the description adds no new transparency beyond operational details.

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

Conciseness4/5

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

The description is well-structured with a brief introduction followed by line-separated explanations for each kind. It front-loads the unified purpose. While it is somewhat verbose (occasionally repeating 'a and b' and 'b is required'), each sentence contributes value. The structure makes scanning for the appropriate kind easy.

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

Completeness4/5

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

Given the tool's complexity (four kinds, six parameters) and the presence of an output schema, the description covers the main usage scenarios comprehensively. It explains parameters, required inputs for most kinds, and output format for snapshot. It does not detail return structure for shape/fit/align, but the output schema likely covers that. No major gaps are apparent.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains the role of parameters 'a', 'b', 'kind', 'axis', 'mode', and 'format' in context of each kind. However, there is a slight inconsistency: the description states 'b is required' for shape, fit, and align, but the schema lists 'b' as optional (default empty). Despite this, the description adds significant meaning beyond the bare schema, earning a 4.

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

Purpose5/5

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

The description clearly states it is a 'Unified comparison tool' and elaborates four distinct kinds (shape, fit, align, snapshot) with specific resources (named shapes, session state). Each kind has a concise purpose statement, such as 'compares two named shapes from show() by volume/bbox/topology'. The description effectively distinguishes the tool from siblings by focusing on comparison operations.

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

Usage Guidelines3/5

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

The description provides clear context for when to use each kind (e.g., shape for geometry comparison, fit for spatial relationships). However, it does not mention when not to use this tool or compare it to sibling tools like 'measure' or 'analyze_printability'. No explicit guidance on alternatives is given, which limits its helpfulness for agent decision-making.

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

cross_sectionsA
Read-only

Compute cross-sectional areas at evenly spaced planes along an axis. Returns a list of {position, area} pairs. axis: X, Y, or Z (default Z). num_slices: number of planes (default 10, minimum 2). Useful for detecting internal voids, wall-thickness variation, or verifying that a shape's cross-section profile matches a reference. object_name: named object from show() (default: current shape).

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNoZ
num_slicesNo
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds behavioral details: return format, default values, and constraints (minimum slices). No contradictions.

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

Conciseness5/5

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

Three sentences, no wasted words. First sentence states action, second defines output, third provides usage context. Front-loaded with the essential function.

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

Completeness5/5

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

For a read-only tool with 3 parameters and an output schema, the description covers purpose, parameters, use cases, and return type. No missing information needed for proper invocation.

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

Parameters5/5

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

Schema has 0% description coverage; the description fully compensates by explaining each parameter's meaning, allowed values (X/Y/Z for axis), defaults, and constraints (min 2 for num_slices).

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

Purpose4/5

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

The description clearly states the tool computes cross-sectional areas along an axis, with specific verb and resource. It includes return format and parameter details, but does not explicitly distinguish from sibling tools like 'measure' or 'clearance'.

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

Usage Guidelines4/5

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

The description provides clear use cases (detecting voids, wall-thickness variation, verifying cross-section profile) but does not mention when to avoid this tool or suggest alternative tools from the sibling list.

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

design_auditA
Read-only

Audit the current session program as a design, not just a shape: surface its named numeric parameters (Θ) and test how robust each is to editing. Parses the assembled program (see script()) for top-level numeric assignments (e.g. plate_thickness = 5.0), then rebuilds the program with each parameter nudged ±epsilon (default ±10%) in a hard-bounded subprocess (the live session is never mutated) and runs the validity gate on each result. Returns JSON: {parameters, baseline, audit:[{name, value, perturbations:[{delta_pct (realized), new_value, discrete_step?, rebuilt, passes_gate, volume_delta_pct, reasons?}], brittle}], summary:{robust, brittle, inconclusive, ...}, note}. A parameter is brittle if a small change fails to rebuild or drops below the validity gate — the thin-wall / coordinate-reasoning failure mode where a valid shape is not an editable design (Arko-T §6); a parameter reassigned at the top level is inconclusive (perturbation is overwritten), not counted as robust. If no named parameters are found, the program uses inline magic constants and the note advises hoisting them to a parameter block. Known limitation: only literal-valued top-level names are surfaced as Θ — a derived parameter (radius = diameter / 2) is not listed, though perturbing its upstream literal flows through. Bounded by a wall-clock budget and max_params (returns a partial report rather than risking a timeout). epsilon: relative nudge, 0<epsilon<1. max_params: cap on parameters audited.

ParametersJSON Schema
NameRequiredDescriptionDefault
epsilonNo
max_paramsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Disclosures are consistent with readOnlyHint annotation, stating live session is never mutated. Details subprocess execution, wall-clock budget, partial reports, and definitions of 'brittle' and 'inconclusive'. Provides high behavioral transparency 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.

Conciseness4/5

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

Description is dense but well-organized: starts with purpose, then process, then output format, definitions, limitations. Every sentence adds value; no redundancy. Could be slightly more concise but front-loaded effectively.

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

Completeness5/5

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

Given presence of output schema, description provides complete context: input parameters, process, return format with fields, known limitations, and edge cases. No gaps remain for an AI agent to understand tool behavior.

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

Parameters4/5

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

Despite 0% schema description coverage, the description explains both parameters: epsilon as relative nudge (0<epsilon<1, default 10%) and max_params as cap on parameters audited. Adds meaning beyond schema defaults.

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

Purpose5/5

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

Description clearly states the tool audits a session program as a design, surfaces numeric parameters, and tests robustness. It distinguishes from siblings like `script` or `validate` by its specific focus on parameter robustness analysis.

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

Usage Guidelines4/5

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

Explicitly describes when to use (to audit design robustness) and includes limitations (only literal-valued top-level names, budget constraints). Advises hoisting if no parameters found. Could be more explicit about when not to use compared to specific siblings, but still strong.

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

destroy_sessionA
DestructiveIdempotent

Close THIS client's CAD session, discarding its namespace, objects and snapshots, and release its worker subprocess. The next tool call transparently starts a fresh session under the same handle. Use when abandoning a model entirely; prefer reset() to clear geometry while keeping the session. Only meaningful over HTTP with a session handle configured.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (destructiveHint, idempotentHint), the description discloses concrete side effects: discarding namespace, objects, snapshots, releasing the worker subprocess, and that the next call transparently starts a fresh session under the same handle. It also specifies the HTTP-only context. 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.

Conciseness5/5

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

The description is three sentences: first states the core action, second explains post-condition, third gives usage guidance. It is front-loaded and every sentence provides distinct value without redundancy.

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

Completeness5/5

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

For a destructive, zero-parameter tool, the description covers the action, the complete set of effects, the intended use case, the alternative, and the operational prerequisite. With an output schema present and strong annotations, no further details are needed.

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

Parameters4/5

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

The schema has zero parameters, so the baseline is 4. The description adds meaning by clarifying that 'THIS client's' session and 'session handle' are involved, though no parameter syntax is needed. With 100% schema coverage (vacuously), the description does not need to explain any params.

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

Purpose5/5

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

The description uses a specific verb ('Close THIS client's CAD session') and resource ('session'), and explicitly lists consequences (discarding namespace, objects, snapshots, releasing worker subprocess). It also distinguishes itself from sibling 'reset' by clarifying that reset clears geometry while keeping the session.

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

Usage Guidelines5/5

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

Explicitly states when to use ('when abandoning a model entirely') and when not to ('prefer reset() to clear geometry while keeping the session'). Also notes the HTTP/session-handle prerequisite, giving clear context for appropriate invocation.

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

executeA

Execute build123d Python code in the persistent session. Errors include automatic fix hints — read them before retrying. Use show(shape, name) to register named objects (name defaults to 'shape'); show() immediately prints volume and face count confirming the shape is non-empty. After any boolean operation (-, +, &) call measure() to confirm it succeeded (check topology.faces). named_face(shape, name) is a built-in helper: named_face(box, 'top') returns the highest-Z face, 'bottom'/'front'/'back'/'left'/'right' work similarly. find_edges(shape, geom='circle', radius=4.25, at_z=10.2, length=None, tol=0.05) filters edges for fillet/chamfer selection and prints what matched. Analysis primitives are callable INSIDE this execute() code and return real Python objects so you compose (filter, do arithmetic) instead of copying numbers out of a tool result: measure(shape) -> dict (measure(part)['volume']), clearance(a, b) -> dict, cross_sections(shape) -> list of {position,area}, find_holes(shape) -> hole records with .location (an (x,y,z) tuple), .diameter, .depth, … ([h for h in find_holes(part) if h.location[0] < 5]); find_bosses(shape) / find_bored_bosses(shape) / find_countersinks(shape) / find_hole_patterns(shape) return recogniser records too; align_check(a, b, axis='Z', mode='flush') -> dict (align_check(a,b)['delta'] is a float). For standalone MCP comparison calls, use compare(a='axle', b='frame', kind='fit'), compare(a='a', b='b', kind='align'), compare(a='before', b='after', kind='shape'), or compare(a='before', kind='snapshot'). shape defaults to the current shape, and measure/clearance/cross_sections stay bounded on large shapes. save_json(name, obj) writes structured analysis data (face inventories, hole tables) to a server scratch file and returns its path — use it instead of printing large results; open()/os stay blocked.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

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

Disclosures beyond annotations: describes error fix hints, behavior of show/measure/find_edges, and notes that open()/os remain blocked. No contradictions with readOnlyHint=false and destructiveHint=false.

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

Conciseness3/5

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

Very long description listing many built-in functions. While all info is valuable, it lacks conciseness and could be structured with bullet points. Every sentence earns its place but overall length reduces clarity.

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

Completeness4/5

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

Covers error handling, built-in functions, safety notes, and analysis primitives. Output schema exists so return values not needed. Missing explicit mention of session persistence across calls, but otherwise comprehensive.

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

Parameters3/5

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

Only parameter 'code' is not directly described in schema (0% coverage). Description compensates by explaining what code does, but doesn't specify format or constraints like length. Baseline 3 due to low coverage and some context added.

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

Purpose5/5

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

Clearly states 'Execute build123d Python code in the persistent session' with specific verb and resource. Distinguishes from siblings like 'script' by emphasizing persistence and error fix hints.

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

Usage Guidelines4/5

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

Provides explicit usage context: errors include fix hints, and gives examples of built-in functions and when to use 'compare' for standalone calls. Lacks explicit when-not-to-use but offers clear alternatives.

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

exportA
Idempotent

Export model. format: step, stl, 3mf, dxf, svg, or comma-separated list e.g. 'step,stl' or 'dxf,svg'. 3D shapes (solids) export to step/stl/3mf; 2D shapes (Sketches and dimensioned drawings composed via build123d.drafting) export to dxf/svg. 3mf is a minimal core-spec mesh export (single object, no color/material) intended for slicers (Bambu Studio, PrusaSlicer, Orca) — use step for downstream CAD interop instead. Mixing 2D and 3D formats for the same shape errors with a clear message. object_name: named object from show(), '' to export all named shapes as a combined assembly (default: current shape). STEP exports carry the session names as labels — single-object exports use the object_name, '' exports produce a Compound labelled 'assembly' with each child labelled by its show() name. Downstream CAD tools (FreeCAD, Fusion) will see the structured assembly with named bodies. Use dxf for engineering-drawing handoff to other CAD tools; svg for embedding in docs/wikis. The result echoes the exported shape's volume/bbox/face count (or bbox/edge count for 2D) as a final sanity check that the right, non-degenerate object was written.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNostep
filenameYes
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (which only indicate idempotent, non-read-only, non-destructive), the description discloses critical behaviors: single-object vs assembly export, label propagation in STEP, 2D/3D format limitations, error on mixing, and a final echo of geometry metrics as a sanity check. This is rich, non-obvious context that annotations do not provide.

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

Conciseness4/5

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

The description is long but every sentence adds value, covering formats, use cases, error conditions, and export behavior. It's slightly dense and could be broken into paragraphs for readability, but it is not wasteful. The core purpose is stated upfront, making it well-front-loaded.

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

Completeness5/5

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

Given the tool's complexity (multi-format export, object selection, assembly handling, error cases, and result verification), the description covers all necessary aspects. The output schema exists, so not explaining return values is acceptable. The description is complete enough for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully explains the 'format' parameter (allowed values, 2D/3D mapping, comma-separated lists) and 'object_name' ('*', named object, default current shape). It even clarifies implications of the filename through context. The description adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

The description opens with 'Export model' and goes on to specify the exact resource (model) and action, then elaborates on format options and behavior. It clearly distinguishes itself from siblings like render_view or save_snapshot by focusing on file export with format-specific details.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use each format: 'use step for downstream CAD interop instead', 'Use dxf for engineering-drawing handoff', 'svg for embedding in docs/wikis', and notes 3mf is for slicers. This gives clear context and alternatives, satisfying the 'when/when-not/alternatives' criterion.

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

find_bored_bossesA
Read-only

Find candidate bored bosses and report target-selection/edit evidence: bore opening location, axis into the part, outward axis, bore diameter/depth, planar cap faces at the opening, whether the cap is split across multiple faces, and construction advice. Use this before extending a square/rounded-square boss with a central bore; it is read-only and diagnostic, not proof of the requested target.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds that it is diagnostic and lists the specific details reported. No contradictions and provides useful behavioral context beyond annotations.

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

Conciseness5/5

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

Two to three sentences, front-loaded with the main action and details. Every sentence provides essential information without redundancy. Highly concise.

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

Completeness3/5

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

Tool has a single optional parameter and an output schema. The description lists reported items but does not explain the input parameter. Given the low complexity, the gap in parameter guidance makes it incomplete.

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

Parameters2/5

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

Only one optional parameter 'object_name' with default empty string. Schema coverage is 0%, but description does not explain what the parameter represents or how to use it. The description mentions 'extending a boss' but does not connect to the parameter, leaving ambiguity.

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

Purpose5/5

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

The description clearly states the tool finds candidate bored bosses and reports specific evidence (bore opening location, axis, diameter/depth, cap faces, etc.), distinguishing it from sibling tools like 'find_bosses' which likely find generic bosses.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'before extending a square/rounded-square boss with a central bore.' Also clarifies it is 'read-only and diagnostic, not proof.' No explicit alternatives mentioned, but the context is clear.

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

find_bossesA
Read-only

Recognise external cylindrical bosses on a session object (defaults to current shape), including a turned part's OD — filter on diameter against the part envelope for local bosses only. Returns JSON: {count, bosses: [{axis (base toward free end), location (free-end point), diameter, height}]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses the output format (JSON with count and boss details) and the read-only nature (consistent with readOnlyHint). Adds behavioral context beyond annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, then output format. No wasted words.

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

Completeness5/5

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

Given the one parameter and explicit output schema in the description, the tool definition is fully informative for an agent.

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

Parameters4/5

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

With 0% schema parameter coverage, the description explains the single parameter 'object_name' as a session object defaulting to current shape, compensating for missing schema descriptions.

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

Purpose5/5

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

The description clearly states the tool recognizes external cylindrical bosses, including on turned parts, with filtering for local bosses. It differentiates from siblings like find_holes by specifying boss detection.

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

Usage Guidelines3/5

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

The description mentions filtering for local bosses, implying when to use, but does not explicitly state when not to use or provide alternatives.

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

find_countersinksA
Read-only

Recognise countersinks (conical screw-head recesses) on a session object (defaults to current shape) — the feature find_holes reports only as a plain opening. A countersink is an internal cone flaring from a drilled bore out to a larger opening, coaxial with the drill; drill-point cones and external edge chamfers are excluded. Returns JSON: {count, countersinks: [{location (opening centre), axis (into the part), major_diameter (countersink Ø at the surface), drill_diameter, included_angle (deg, e.g. 82/90/100/120), depth}]}. object_name: named object from show() (default: current shape).

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true, and the description adds valuable behavioral details: excludes drill-point cones and edge chamfers, returns specific JSON structure, and explains the default for object_name. No contradictions.

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

Conciseness4/5

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

The description is multi-sentence but each sentence adds distinct value: purpose, definition, exclusions, return format, parameter. It could be slightly more concise, but it is well-structured and front-loaded.

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

Completeness5/5

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

Given the low complexity (1 parameter, output schema present, readOnlyHint), the description is complete. It explains what countersinks are, what is excluded, JSON return structure, and parameter behavior. No missing critical information.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining the single parameter 'object_name': it references a named object from show() and defaults to current shape. This provides essential meaning beyond the schema's type and title.

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

Purpose5/5

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

The description clearly identifies the tool's purpose: recognizing countersinks on a session object. It specifies the resource (session object), the action (recognise), and explicitly distinguishes from the sibling tool 'find_holes', which reports only as plain openings.

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

Usage Guidelines4/5

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

The description provides context on default behavior (current shape) and contrasts with 'find_holes', but does not explicitly state when to use versus other shape analysis tools like 'find_bosses' or 'analyze_printability'. It implies usage for countersink detection but lacks explicit alternatives.

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

find_hole_patternsA
Read-only

Recognise hole patterns on a session object (defaults to current shape): ≥3 identical-spec holes equally spaced on a circle → bolt_circle (center, diameter/BCD), collinear at constant pitch → linear_array (pitch, direction). Returns JSON: {count, patterns: [{type, holes: [HoleFeature records], center/diameter | pitch/direction}]}. Each hole belongs to at most one pattern; make_drawing already annotates these automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description aligns (read-only analysis). Beyond annotations, the description adds value by explaining default behavior (current shape), output structure, and that holes belong to at most one pattern. It does not contradict annotations.

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

Conciseness5/5

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

The description is extremely concise with three sentences, front-loading the core purpose and pattern types, then efficiently covering output and behavioral caveats. No superfluous information.

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

Completeness4/5

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

Given the tool's simplicity (one optional param, read-only, defined output schema), the description is mostly complete, covering pattern types, output structure, and hole assignment. Minor gaps remain, such as precision of 'identical-spec holes' and handling of no patterns, but overall it provides sufficient context for correct selection.

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

Parameters3/5

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

With 0% schema description coverage, the description partially compensates by explaining that object_name defaults to the current shape. However, it does not fully detail parameter constraints, such as required format or existence checks, leaving gaps for the agent.

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

Purpose5/5

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

The description clearly states the tool identifies hole patterns (bolt_circle and linear_array) on session objects. It distinguishes itself from the sibling tool 'find_holes' by focusing on pattern detection rather than individual holes, and it mentions that each hole belongs to at most one pattern, reinforcing its specific scope.

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

Usage Guidelines3/5

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

The description implies the tool is for pattern detection and defaults to the current shape, but it lacks explicit guidance on when to use it versus alternatives like 'find_holes'. The note about make_drawing annotating automatically hints at redundancy, but no clear when-not or alternative comparisons are provided.

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

find_holesA
Read-only

Recognise drilled holes on a session object (defaults to current shape). Coaxial internal cylinders are grouped into one record per hole: drill + counterbore + spotface stacks, keyway-split bores, and bores interrupted by crossing holes all count once. Returns JSON: {count, holes: [{axis (drilling direction, unit vector), location (opening point), diameter, depth (bore top to deep end; drill-point cone excluded), bottom: through|flat|drill_point|unknown, cbore: {diameter, depth}|null, spotface: {diameter, depth}|null}]}. Countersinks read as openings (not steps); threads and non-cylindrical features are not recognised.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations indicate readonly, and the description adds significant behavioral detail: grouping of coaxial cylinders, exclusion of threads and non-cylindrical features, and how countersinks are handled. This adds value beyond annotations.

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

Conciseness4/5

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

The description is reasonably concise for the detail provided, front-loading the purpose. Some details about output JSON could be abbreviated, but overall structure is effective.

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

Completeness5/5

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

Given the tool has one optional parameter, an output schema (partially described), and sibling tools, the description thoroughly covers behavior, return format, and recognition rules, leaving little ambiguity about what the tool does.

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

Parameters2/5

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

Schema coverage is 0%, and the description only mentions that object_name defaults to the current shape. It does not explain how to specify other objects, the expected value type, or constraints, leaving substantial ambiguity.

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

Purpose5/5

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

The description clearly states the tool recognizes drilled holes, defaults to the current shape, and lists specific grouping rules. It distinguishes from sibling tools like find_countersinks and find_bosses by detailing what is and isn't recognized.

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

Usage Guidelines3/5

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

The description mentions parameter defaulting but provides no explicit guidance on when to use this tool over siblings or when not to use it. Usage context is implied but not stated.

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

health_checkA
Read-only

Verify that render and export dependencies are working. Tests PNG render (VTK), SVG render (build123d HLR), STEP export, and STL export with a trivial shape. Returns JSON with ok/error per capability. Run at session start if you suspect a missing dependency.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, so the tool is safe. Description adds behavioral details: tests specific capabilities and returns JSON with ok/error per capability. No contradiction.

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

Conciseness5/5

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

Three concise sentences: purpose, what it tests, return type, usage advice. No wasted words, front-loaded with key action.

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

Completeness5/5

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

Completely adequate for a zero-parameter tool with output schema. Description covers purpose, tested capabilities, and response structure.

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

Parameters4/5

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

No parameters exist; schema coverage is 100%. Description adds no parameter info because none needed. Baseline score of 4 for zero-parameter tool.

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

Purpose5/5

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

Description states specific verb 'Verify' and resource 'render and export dependencies', listing exact tests (PNG, SVG, STEP, STL). Distinguishes itself from siblings by being a health check for dependencies, not a manipulation or analysis tool.

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

Usage Guidelines4/5

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

Explicit usage context: 'Run at session start if you suspect a missing dependency.' Does not mention when not to use or alternatives, but provides clear trigger for invocation.

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

import_cad_fileA

Import a STEP (.step/.stp), STL (.stl), or 3MF (.3mf) file as a named object in the session. path: absolute or relative path to the file. name: name to register the shape under (defaults to the filename stem). The shape becomes both the named object and the current_shape. A multi-object 3MF registers an aggregate under name plus each member as name_1, name_2, etc.; the result includes per-member topology summaries. After importing, use render_view() to visualise the shape, measure() for geometry queries, or compare(a='imported', b='model', kind='shape') to diff against a show() object. Note: STL imports produce a shell (volume=0) rather than a solid. 3MF commonly yields editable solids when its meshes are closed, but callers must check the returned solids and volume fields rather than assuming every mesh is valid. If you have both the original built shape and an imported copy in session.objects, render the imported one by name (e.g. objects='mypart') to avoid Z-fighting artifacts from two co-located shapes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description goes far beyond the annotations (readOnlyHint=false, destructiveHint=false) by detailing side effects: the shape becomes both the named object and current_shape, multi-object 3MF creates aggregate and member entries, STL imports yield a shell (volume=0), and 3MF solids require caller validation via returned fields. This provides essential behavioral context.

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

Conciseness5/5

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

The description is detailed but every sentence serves a purpose: purpose, parameters, state change, multi-object behavior, format caveats, and usage tips. It is front-loaded with the main action and progressively adds necessary detail without waste.

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

Completeness5/5

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

The description covers all critical aspects: formats, parameters, session state, output characteristics (per-member summaries, solids/volume fields), and post-import actions. It is comprehensive enough for an agent to use the tool correctly and anticipate common pitfalls.

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

Parameters5/5

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

With 0% schema description coverage, the description fully explains both parameters: path (absolute/relative) and name (with default filename stem). This compensates entirely for the schema's lack of descriptions.

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

Purpose5/5

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

The description clearly states the tool imports CAD files (STEP, STL, 3MF) as named objects, with explicit format extensions. It distinguishes this from sibling tools by focusing on the import action and resulting session state, making it unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool, including post-import workflow (render_view, measure, compare) and a specific Z-fighting avoidance scenario. It lacks explicit 'when not to use' or alternative import tools, but the guidance is strong enough for correct usage.

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

inspect_drawingA
Read-only

Structured bbox and annotation report for a 2D drawing.

Two modes:

1. Session mode (default): inspects objects registered via annotate()/show().
   Returns per-object bounding boxes, face/edge counts, annotation metadata
   (label string, measured length, Leader tip/elbow), and structural lint.

2. SVG mode (svg_path set): parses an SVG file from disk and reports page
   size, layer ids, text content + positions, and element counts. Decouples
   inspection from the build-and-register ceremony — works on SVGs from any
   source (CI artifacts, third-party exports, prior runs).

Use annotate(result, name) instead of show(result.shape, name) when building
with build123d_drafting so metadata is captured:

    from build123d_drafting import Dimension, Draft
    draft = Draft(font_size=2.5, decimal_precision=1)
    w = Dimension((-20, -10, 0), (20, -10, 0), "below", 8, draft, label="40")
    annotate(w, "width_dim")

For vanilla build123d.ExtensionLine/DimensionLine, pass the label explicitly:

    w = ExtensionLine(border=[...], offset=6, draft=draft, label="40")
    annotate(w, "width_dim", label="40")

Args:
    objects: comma-separated object names (default: all). Session mode only.
    svg_path: path to an SVG file on disk. Switches to SVG mode.
ParametersJSON Schema
NameRequiredDescriptionDefault
objectsNo
svg_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, confirming a safe read operation. The description goes beyond by detailing what is returned (bounding boxes, annotation metadata, lint) and explaining behavior in both modes, including SVG mode's independence from the session. No contradictions.

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

Conciseness4/5

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

The description is fairly long but well-structured with headings and bullet-like sections. It is front-loaded with the core purpose. Every sentence adds value, though the examples could be slightly condensed. Overall, it is appropriately detailed without being overly verbose.

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

Completeness5/5

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

Given the tool's dual-mode complexity and the presence of an output schema, the description is complete. It covers both modes, explains what is returned, and provides necessary context for using annotate() with different libraries. No gaps are apparent.

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

Parameters4/5

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

Schema description coverage is 0%, so the description bears full responsibility. It explains both parameters: 'objects' (comma-separated names, default all) and 'svg_path' (switches to SVG mode). It also provides usage examples, adding significant value beyond the schema's basic type definitions.

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

Purpose5/5

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

The description clearly defines the tool as providing a structured bbox and annotation report for 2D drawings. It explicitly distinguishes two modes (session and SVG) and explains what each does, making it easy to understand the tool's purpose and differentiate from sibling tools like lint_drawing.

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

Usage Guidelines4/5

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

The description gives clear guidance on when to use each mode, including examples and prerequisites for session mode (using annotate() correctly). It also explains default behavior (all objects). While it does not explicitly state when not to use this tool, the context provided is sufficient for correct selection.

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

inspect_partA
Read-only

Return one compact generation-checkpoint inventory: bbox, solid/topology counts, holes grouped by axis/diameter/depth/bottom, bosses grouped by axis/diameter/height, recognised patterns with member counts, and a cross-section area profile. expected is an optional JSON object derived from the drawing/spec; supported keys are bbox [x,y,z], solid_count, holes/bosses/patterns group lists, section_varying, and tolerance. Pattern groups can check type, diameter, pitch, direction, center, member_count, and member_diameter. A supplied feature category is an exact inventory: unexpected or ambiguously matched groups fail. With expectations, returns explicit PASS/FAIL plus mismatches. Without them, returns INVENTORY plus heuristic warnings for shallow partial cuts and nearly constant sections. Unsupported expectation keys are rejected; this tool contains no built-in fixture expectations.

ParametersJSON Schema
NameRequiredDescriptionDefault
expectedNo
object_nameNo
section_axisNoZ
section_slicesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

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

Despite readOnlyHint annotation, the description adds significant behavioral detail: exact feature matching (unexpected or ambiguous groups fail), unsupported expectation keys rejected, no built-in fixture expectations, and heuristic warnings for shallow cuts/constant sections. This goes far beyond the annotation and clarifies failure modes.

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

Conciseness4/5

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

The description is dense but well-structured: it front-loads the main output, then explains optional parameter behavior, exact matching semantics, return modes, and constraints. Each sentence contributes value, though it could be slightly tightened.

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

Completeness4/5

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

Given the tool's complexity and output schema, the description covers return modes, error conditions, and heuristic warnings comprehensively. However, it omits context on object_name and sectioning parameters, and doesn't discuss relationship to other inspection tools. Still, the core behavior is fully specified.

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

Parameters3/5

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

Schema coverage is 0%, so description must compensate. It thoroughly explains the 'expected' parameter with supported keys and matching behavior, but says nothing about object_name, section_axis, or section_slices, leaving those under-characterized. Partial compensation only.

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

Purpose5/5

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

The description states a specific verb+resource: 'Return one compact generation-checkpoint inventory' and enumerates exact contents (bbox, solid/topology counts, holes, bosses, patterns, cross-section area profile). This clearly distinguishes it from sibling find_* tools which are single-feature, while inspect_part provides a consolidated inventory.

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

Usage Guidelines3/5

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

The description provides clear conditional context (with/without expectations) but does not explicitly state when to use this tool versus alternatives like find_holes or analyze_printability. It implies a checkpoint/inventory use case but lacks direct comparison or exclusion guidance.

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

install_skillA

Copy a b123d workflow skill into the current project.

Writes the appropriate config file for the requested agent so the
step-by-step workflow is available in future sessions.

skill: which workflow to install (default "drawing")
  - drawing   → multi-view engineering drawings from build123d geometry
  - modeling  → build 3D parts/assemblies (incl. from technical drawings)
  - edit      → modify existing build123d code and verify geometry deltas
  - repair    → repair a solid that fails the validity gate
target: one of "claude" (default), "agents-md", "cursor", "windsurf"
  - claude     → .claude/skills/<skill-dir>/SKILL.md  (Claude Code)
  - agents-md  → AGENTS.md  (Codex CLI, Antigravity, GitHub Copilot, Cline)
  - cursor     → .cursor/rules/<skill-dir>.mdc
  - windsurf   → .windsurfrules
force: overwrite existing installation (default False)
ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
skillNodrawing
targetNoclaude

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate the tool is not read-only and not destructive. The description adds context that it writes config files, overwrites if force=True, and lists the effects for each skill-target combination. 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.

Conciseness5/5

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

The description is well-structured with a clear general statement, followed by bullet-like lists for skill and target parameters. Every sentence adds value, no redundancy.

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

Completeness5/5

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

The description covers all necessary aspects: what the tool does, parameter details with examples, and behavioral context (defaults, overwrite). With an output schema present, return values need not be explained.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description fully explains each parameter: skill options with their meanings, target options with file paths, and force behavior. This compensates completely for the missing schema descriptions.

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

Purpose5/5

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

The description clearly states the tool copies a workflow skill into the current project and writes config files, with specific skill types and targets listed. This distinguishes it from sibling tools like workflow_hints, validate, or analyze tools.

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

Usage Guidelines4/5

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

The description explains when to use the tool (to install specific workflow skills for different agent targets) and provides defaults, but does not explicitly state when not to use it or mention alternative tools.

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

last_errorA
Read-only

Return details of the last failed execute() call: exception type, message, and (for runtime and syntax errors) line number and a 5-line excerpt around the failing line. Security errors include a message but no line/excerpt. Returns {"error": null} if the last execute() succeeded or no execute() has failed yet. Call this immediately after an execute() error to get the exact failing line — much faster than re-reading the submitted code.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so safety is covered. The description adds valuable context on return structure for different error types and the case when no error occurred.

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

Conciseness5/5

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

The description is concise, with three sentences that efficiently convey purpose, behavior, and usage advice. No unnecessary words.

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

Completeness5/5

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

For a zero-parameter tool with an output schema, the description fully explains what it returns and when to use it. No gaps.

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

Parameters4/5

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

No parameters exist, so the baseline is 4. The description does not need to add meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool returns details of the last failed execute() call, including specific error information. It distinguishes itself from siblings like execute by focusing solely on error retrieval.

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

Usage Guidelines4/5

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

The description explicitly advises to call it immediately after an execute() error and contrasts it with re-reading code. It indicates when to use but does not explicitly state when not to use, though the context is clear.

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

lint_drawingA
Read-only

Run structural drawing-quality checks and return JSON {violations: [...]}.

Session mode (default): reconstructs the session's annotations and delegates
to build123d-drafting-helpers (lint_drawing + find_interferences) — single
source of truth. Surfaces label-vs-measured divergence (axis swap), Leader
line through its own label, annotation/label overlap, a witness/extension
line piercing a neighbour's label, redundant collinear lines, and page-bounds
overshoot.

SVG mode (svg_path set): scans an SVG file for export-only pathologies — most
importantly native <text> elements (build123d renders glyph paths, so any
<text> won't DXF-export and won't scale with the model).

drawing_scale: when the geometry was scaled up before projecting — e.g. a
7.5 mm feature drawn at 5:1 via part.scale(5) — pass the same factor (5.0)
so the label-vs-measured check divides each measured path length by it
before comparing to the label. This lets labels carry the *real* dimension
while the geometry is drawn enlarged, instead of every dim tripping a false
axis-swap warning. Session mode only; defaults to 1.0 (no scaling).

view_shape_names: list of shape names (from show()) representing the placed
view outlines. Used to detect view_annotation_overlap (annotation bbox
overlaps a view outline) and view_overlap (two view outlines overlap).
Pass the visible-side placed compounds from each projection, e.g.
["front_placed", "side_placed", "plan_placed", "iso"]. Session mode only.

Each violation is {severity, check, object, message}. Run this after major
drawing additions; running it BEFORE rendering catches the bug at the source.
ParametersJSON Schema
NameRequiredDescriptionDefault
svg_pathNo
drawing_scaleNo
view_shape_namesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true; the description confirms it runs checks and returns violations without side effects. It adds significant behavioral detail: two modes, specific checks performed, and how drawing_scale affects false positives. This adds value beyond the annotations.

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

Conciseness4/5

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

The description is somewhat long but well-structured with sections and bullet-like lists. Key information is front-loaded (purpose and return format). Each sentence adds value, though some details could be more concise. Overall effective.

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

Completeness5/5

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

Given the tool has an output schema (violations) and three parameters, the description covers all important aspects: modes, parameter semantics, violation structure, and usage timing. It is self-contained and sufficient for an agent to understand and invoke the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, so the description must explain all three parameters. It does so thoroughly: svg_path triggers SVG mode, drawing_scale adjusts label-vs-measured checks with default 1.0, view_shape_names detects view overlaps. Each parameter's purpose, usage, and defaults are clearly described.

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

Purpose5/5

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

The description clearly states the tool runs structural drawing-quality checks, returns JSON with violations, and lists specific categories (label divergence, overlaps, etc.). It distinguishes session mode (annotations) from SVG mode (SVG file scanning), making the purpose concrete and differentiating it from sibling tools like inspect_drawing.

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

Usage Guidelines4/5

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

The description advises 'Run this after major drawing additions; running it BEFORE rendering catches the bug at the source.' It also explains when to use each mode (session vs. SVG). However, it does not explicitly state when not to use the tool or name alternatives, though the context is clear.

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

list_sessionsA
Read-only

Report how many CAD sessions this server process is holding, its configured limit, and how long each has been idle. Handles are secrets and are never returned. Operator/diagnostic tool for HTTP deployments — over stdio there is always exactly one session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses that handles are secrets and never returned, which is important security behavior, and explains the stdio vs HTTP session count difference. It adds useful context without contradicting the annotation.

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

Conciseness5/5

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

Two concise sentences cover the main function, security caveat, and deployment context without redundancy. Every word adds value.

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

Completeness5/5

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

Given the simple scope (no params, read-only, has output schema), the description fully covers purpose, security, and operational nuance. It is complete for an operator/diagnostic tool.

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

Parameters4/5

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

The tool takes 0 parameters, so there is nothing for the description to explain. The schema coverage is trivially 100%, and the baseline for 0 params is 4.

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

Purpose5/5

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

The description uses a specific verb ('Report') and resource ('CAD sessions') and clearly states the three pieces of information returned: count, limit, and idle times. The phrase 'Operator/diagnostic tool' plus the HTTP/stdio distinction differentiates it from siblings like health_check and session_state.

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

Usage Guidelines4/5

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

It explicitly notes this is for HTTP deployments and that over stdio there is always exactly one session, providing clear context for when to use it. However, it doesn't explicitly name alternative tools, so it falls short of full 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.

locate_gate_defectsA
Read-only

Report WHERE a solid fails the validity gate, with 3D coordinates — so you can fix the exact edge/face instead of guessing. validate()/export() tell you WHAT is wrong (e.g. "1 non-manifold edge", "BRepCheck failed") but not where; call this when validate() FAILs to get a per-defect list: brep_invalid_face (face index + center + BRepCheck status, e.g. an unorientable BSpline), open_edge / nonmanifold_edge (B-rep edge midpoint + faces_incident), the mesh self-touches a CAD scorer rejects — mesh_nonmanifold_edge (edge midpoint) and mesh_nonmanifold_vertex (corner-to-corner touch point), mesh_untriangulated_face (a face that cannot tessellate at the base tolerance), mesh_refined_untriangulated_face (a face that only fails at a finer tolerance) — and mesh_vertex_deflection_defect (a tessellated edge endpoint that misses its own BREP vertex by more than the mesh deflection — a patched/healed face whose boundary is topologically closed but geometrically off-vertex; BRepCheck and even the open-edge count can both read clean, but a CAD scorer's own mesh sanity check still rejects it). Each defect includes a generic repair hint plus diagnostic_class / repair_family / next_step metadata; the top-level diagnosis block counts defect kinds and recommends the next verification path. An empty list means the part passes the structural checks. Bounded out-of-process (it mesh-checks), so a huge part returns a clean budget error rather than hanging. object_name: named object from show() (default: current shape).

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, it discloses the tool's full behavior: it returns per-defect coordinates, includes repair hints and a diagnosis block, returns an empty list when the part passes, and is bounded out-of-process with a budget error for huge parts. This goes far beyond the annotation's minimal read-only flag.

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

Conciseness4/5

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

The description is dense and information-rich, front-loaded with purpose, but it is a single long paragraph rather than structured bullets. Every sentence contributes, but readability would benefit from partitioning; still, it earns a high score for substance.

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

Completeness5/5

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

Given the tool's complexity, the output schema, and the read-only annotation, the description fully covers purpose, usage, behavior, parameters, and edge cases (budget errors), leaving no significant gap. It even explains return semantics despite the output schema.

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

Parameters5/5

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

The only parameter, object_name, is explained in the description as 'named object from show() (default: current shape),' adding semantic context beyond the schema's bare string type and default. This compensates for the low schema coverage.

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

Purpose5/5

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

The description opens with 'Report WHERE a solid fails the validity gate, with 3D coordinates' — a specific verb and resource, and explicitly contrasts with validate()/export() which tell WHAT but not WHERE, distinguishing it from sibling tools. It also enumerates concrete defect types, making the purpose unmistakable.

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

Usage Guidelines5/5

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

It explicitly says 'call this when validate() FAILs to get a per-defect list,' giving a clear trigger condition, and contrasts with validate()/export() as alternatives. It also warns about budget errors for huge parts, which further guides 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.

measureA
Read-only

Measure a shape and return a complete geometric summary: volume (mm³), surface area (mm²), topology (face/edge/vertex counts), bounding box with per-axis size and center, volumetric center of mass, 6-component inertia tensor (Ixx/Iyy/Izz/Ixy/Ixz/Iyz), and a face-type inventory classifying every face as Plane/Cylinder/Cone/Sphere/Torus/BSpline with area and type-specific params (e.g. cylinder diameter and axis); identical faces are collapsed with a count, non-analytic sliver faces folded into one summary line. Prefer measure over render_view for verifying geometry — numbers are unambiguous. topology is the fastest confirmation that a boolean operation succeeded: a failed cut leaves face/edge/vertex counts unchanged. object_name: named object from show() (default: current shape). density (g/cm³) or material preset (steel, stainless, aluminum/6061, brass, copper, titanium, abs, pla, petg, nylon) adds mass_g and scales inertia to true mass moments in g·mm².

ParametersJSON Schema
NameRequiredDescriptionDefault
densityNo
materialNo
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses behavioral traits beyond the readOnlyHint annotation: it details the output structure, mentions that identical faces are collapsed and non-analytic sliver faces are folded into one summary line, and explains that mass and inertia are only computed when density or material is provided. No contradictions with annotations.

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

Conciseness4/5

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

The description is well-structured, starting with the main output summary, then usage guidance, then parameter details. It is slightly lengthy but every sentence adds value. Could be trimmed slightly but remains effective.

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

Completeness5/5

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

Given the tool's complexity (many output fields), the description covers all return values, edge cases (face collapsing), and conditional behaviors (mass/inertia only with density/material). An output schema exists and likely duplicates some details, but the description is still comprehensive.

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

Parameters5/5

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

The description provides full meaning for all three parameters (object_name, density, material) beyond the enum-free schema. It explains defaults and lists material presets. With 0% schema description coverage, the description compensates completely.

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

Purpose5/5

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

The description clearly states the tool's purpose: to measure a shape and return a complete geometric summary including volume, surface area, topology, bounding box, center of mass, inertia tensor, and face-type inventory. It distinguishes itself from the sibling tool render_view by noting that numbers are unambiguous for geometry verification.

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

Usage Guidelines4/5

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

The description explicitly advises preferring measure over render_view for verifying geometry and suggests using topology to check boolean operation success. It also explains when to provide density or material to get mass and inertia. However, it does not explicitly exclude other sibling tools like clearance or cross_sections.

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

render_drawingA
Read-only

Rasterise an existing SVG file to PNG via resvg-py.

Complements render_view (which takes build123d shapes from the live
session) by accepting an SVG written outside the sandbox — typically by
a short Python script that does the ExportSVG call directly. The PNG is
returned inline so the LLM can see the drawing without you having to
open the file in another tool.

Args:
    svg_path: path to an SVG file on disk.
    width: output pixel width (default 1200); height set by SVG aspect ratio.
    save_to: optional path to write the PNG. If empty, PNG bytes are
        delivered inline only.
ParametersJSON Schema
NameRequiredDescriptionDefault
widthNo
save_toNo
svg_pathYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds that the PNG is returned inline and that width uses a default of 1200 with height determined by aspect ratio, using the resvg-py library. It does not detail potential issues like file not found or large file limits, but the key behaviors are covered.

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

Conciseness5/5

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

The description is efficient, consisting of a concise opening sentence, a contrast with a sibling, a note on return method, and a clear Args section. Every sentence adds value with no redundancy.

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

Completeness4/5

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

For a simple conversion tool with no output schema, the description covers the essentials: purpose, input parameters, comparison to a sibling, and return behavior. It could mention error handling or format details, but it is largely sufficient.

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

Parameters5/5

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

The schema has no parameter descriptions (0% coverage). The description compensates fully by explaining each parameter: svg_path is a file path, width is pixel width with aspect ratio scaling, save_to optionally writes the PNG to disk. This adds clear meaning beyond the raw schema.

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

Purpose5/5

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

The description clearly states it rasterizes an SVG file to PNG, and distinguishes from the sibling tool render_view by noting that render_drawing accepts an external SVG file, while render_view uses build123d shapes from the live session.

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

Usage Guidelines4/5

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

The description explains when to use this tool (when you have an SVG file written outside the sandbox) and contrasts it with render_view. However, it does not provide explicit guidance on when NOT to use it or mention other alternatives from the sibling list.

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

render_viewA
Read-only

Render model. Auto-detects 3D vs 2D: solids use the VTK tessellation path; 2D shapes (Sketches, edge Compounds, dimensioned drawings) use the ezdxf+matplotlib raster path — review dimensioned drawings the same way as 3D parts. Renders confirm appearance, not geometry — verify booleans with measure() first. format: 'png' (raster, default), 'svg' (HLR line drawing, works without a display), 'dxf' (HLR projection as parseable polylines for downstream 2D CAD), or 'both' (PNG + SVG together). If the PNG path fails (headless host), falls back to SVG automatically. direction: top, front, side, iso. azimuth/elevation: camera rotation in degrees applied after the direction preset. objects: comma-separated names or name:color pairs e.g. 'u_frame:blue,roller:red' (default: all, auto-coloured). quality: standard, high. clip_plane: x, y, z to slice; clip_at: absolute world coordinate along that axis (default: each mesh's midpoint). save_to: optional file path; for format='both' writes .png and .svg. mode: 'auto' (default; no solids + flat in Z = 2D), or '2d'/'3d' to force a pipeline when auto-detection picks wrong (e.g. a Compound mixing a Sketch and a solid routes to 3D); the path used is reported as 'Rendered via pipeline.' colors: optional dict mapping object names and special layer keys (_dims, _labels) to colour names or '#aabbcc'; overrides name:color syntax and the default dimension colour (2D PNG/SVG only; ignored for 3D and DXF). label_objects: when true, each named object is labelled at its centroid in the PNG. highlights: optional list of entities to label, e.g. [{"object": "bracket", "type": "edge", "index": 5, "label": "hinge_edge"}]; type is 'face', 'edge', or 'vertex', index matches shape.faces()/edges()/vertices(); the object must be registered with show() and in the rendered set. Labels are PNG-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto
colorsNo
formatNopng
azimuthNo
clip_atNo
objectsNo
qualityNostandard
save_toNo
directionNoiso
elevationNo
clip_planeNo
highlightsNo
label_objectsNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses auto-detection logic, fallback behavior, format specifics, object coloring, clip plane operation, and highlight limitations (PNG-only), adding significant context beyond the readOnlyHint annotation.

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

Conciseness4/5

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

The description is long but well-organized, starting with purpose then detailing parameters, though slightly verbose for some users.

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

Completeness5/5

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

Given 13 parameters and no output schema, the description covers all parameter behaviors, auto-detection, fallback, and limitations, providing complete guidance for effective use.

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

Parameters5/5

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

With 0% schema coverage, the description thoroughly explains all 13 parameters including format values, object syntax, clip plane axis, and highlights structure, effectively compensating for the schema gap.

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

Purpose5/5

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

The description starts with 'Render model' and details auto-detection of 3D vs 2D, formats, and parameters, clearly distinguishing from siblings like 'render_drawing' by its scope.

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

Usage Guidelines4/5

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

The description advises using measure() for geometry verification and explains when to force mode if auto-detection is wrong, but lacks explicit comparison with sibling tools.

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

repair_adviceA
Read-only

Return structured, field-proven repair/edit recipes for an agent to implement explicitly in execute(). Unlike repair_hints(), which gives short error-specific tips, this emits a sequenced plan with code-pattern names, acceptance checks, and stop conditions. Provide the full validate()/export()/last_error() text as error_text, the intended edit as goal, and any extra notes from locate_gate_defects()/compare(a='before', b='after', kind='shape') as context. The tool is read-only and does not mutate geometry.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNo
contextNo
error_textNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description confirms the tool is read-only and does not mutate geometry. The description adds that the tool emits a plan, not direct edits, providing helpful behavioral context beyond annotations.

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

Conciseness5/5

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

The description is concise, with two well-structured sentences. The first sentence clearly states the tool's purpose and distinguishes it from a sibling. No wasted words.

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

Completeness4/5

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

Given the existence of an output schema (not shown but indicated), the description does not need to explain return values. It covers input semantics and usage context well. Minor gap: it could mention the structure of the output plan, but the output schema likely covers that.

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

Parameters5/5

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

Despite zero schema description coverage, the description fully explains each parameter: error_text as full validate()/export()/last_error() text, goal as the intended edit, and context from locate_gate_defects()/compare(). This compensates completely for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states the tool returns structured repair recipes for agents to implement, and explicitly distinguishes from sibling repair_hints by noting repair_advice provides a sequenced plan versus short tips.

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

Usage Guidelines4/5

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

The description explains when to use this tool (when a sequenced plan is needed) and contrasts with repair_hints. It also specifies what inputs to provide (error_text, goal, context) from other tools. However, it does not explicitly 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.

repair_hintsA
Read-only

Given an error message or validity-gate reason, return targeted fix suggestions for common build123d mistakes and gate failures: wrong Location syntax, missing .part, CadQuery idioms, blocked imports, degenerate boolean results, fillet edge selection, B-rep defects, mesh non-manifold/open-edge failures, and more. Pass the full error string from execute(), last_error(), validate(), or export().

ParametersJSON Schema
NameRequiredDescriptionDefault
error_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, confirming safe read-only behavior. The description goes beyond by detailing the types of errors covered (wrong Location syntax, missing .part, etc.) and recommended sources, adding meaningful behavioral context without contradicting annotations.

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

Conciseness5/5

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

The description is two concise sentences with no redundant information. The first sentence front-loads the purpose and scope, while the second provides usage guidance. Every sentence is necessary and earns its place.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, read-only, with an output schema), the description sufficiently covers how and when to use it. It mentions return type implicitly ('return targeted fix suggestions'), and the output schema handles return value details.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by identifying the sole parameter (error_text) as an error string and specifying its origin. It adds value beyond the schema's title, though it could include more format or length constraints.

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

Purpose5/5

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

The description clearly states the tool's purpose: to return targeted fix suggestions for common build123d mistakes given an error message. It specifies the verb 'return' and the resource 'fix suggestions', and lists specific error categories, distinguishing it from siblings like repair_advice or workflow_hints.

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

Usage Guidelines4/5

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

The description explicitly tells the user to pass the full error string from specific sources (execute(), last_error(), validate(), or export()), providing clear context for when to use the tool. However, it does not mention when not to use it or specify alternatives among sibling tools.

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

resetA
DestructiveIdempotent

Clear the current session back to empty state, including all snapshots.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate destructive (destructiveHint=true) and idempotent (idempotentHint=true). The description adds that snapshots are also cleared, which is behavioral context beyond the annotations. However, it does not describe side effects like permission requirements or whether any data is recoverable.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the main action. Every word is informative, with no redundancy or filler.

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

Completeness5/5

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

For a parameterless tool with an output schema (as indicated by context signals), the description fully explains the tool's effect: clearing the session and all snapshots. No additional information is needed for an agent to correctly invoke it.

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

Parameters4/5

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

There are no parameters, and schema description coverage is 100% (trivially). Per guidelines, baseline is 4 for zero parameters, and the description adds no parameter info because none exist.

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

Purpose5/5

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

The description clearly states the tool's purpose: clearing the session and all snapshots, using the specific verb 'Clear' and resource 'current session back to empty state'. It distinguishes itself from siblings like 'restore_snapshot' or 'session_state' by specifying a full reset.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or caveats. It simply states what it does, leaving the agent to infer usage context.

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

resolveA
Idempotent

Evaluate a selector expression against a named object and return a geometry descriptor. selector is a Python expression suffix applied to the object, e.g. '.faces().filter_by(Axis.Z).last()'. If label is given, the descriptor is stored in session.geometry_refs[label] and appears in session_state(). Returns JSON: {label, ref, object, selector, type, area/length, center, normal (for Face)}. The ref field uses @cad[object#label] format.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
selectorYes
object_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and readOnlyHint=false, but the description adds useful behavioral context: it stores results in session.geometry_refs if a label is provided and describes the return format. This goes beyond the annotations without contradicting them.

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

Conciseness4/5

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

Three sentences pack substantial information: purpose, example usage, return format, and side-effect of labeling. While concise and front-loaded, the structure could be more bulleted or segmented for easier parsing.

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

Completeness4/5

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

Given the presence of an output schema (not shown but noted), the description covers the essential purpose, parameter usage, and return structure. It omits details about error cases or default behavior when label is omitted, but overall suffices for typical use.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden. It explains the selector parameter with an example ('.faces().filter_by(Axis.Z).last()'), clarifies that object_name is a named object, and describes the label's storage effect. This significantly compensates for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states the tool evaluates a selector expression against a named object and returns a geometry descriptor. It provides a specific verb ('evaluate') and resource, distinguishing it from sibling tools like 'measure' or 'inspect_drawing' that perform different analyses.

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

Usage Guidelines2/5

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

The description does not explicitly state when to use this tool versus alternatives like 'measure' or 'clearance'. It provides no context about prerequisites, when not to use it, or how it compares to other geometry query tools, leaving the agent to infer usage solely from the purpose.

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

restore_snapshotA
Idempotent

Restore geometric state from a previously saved snapshot (current_shape and the show() registry). The Python variable namespace is NOT restored — execute() calls made after the snapshot are still in scope, but current_shape and all show() objects revert to what they were at snapshot time. Raises an error if the snapshot name does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true, which the description supports by implying the operation is reversible and idempotent. Description adds nuance about what is not restored (Python namespace) and error behavior, exceeding annotation detail.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, followed by behavioral nuance and error condition. No superfluous words.

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

Completeness4/5

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

For a simple tool with one parameter and output schema, the description covers main behavior, constraints, and error. Could add a note on idempotency but annotations cover it.

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

Parameters2/5

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

Schema coverage is 0%, so description must compensate. The description only indirectly mentions the 'name' parameter by stating an error if snapshot name does not exist. It does not explain what valid names are, where snapshots come from, or format requirements.

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

Purpose5/5

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

Description clearly states 'Restore geometric state from a previously saved snapshot' with specific details about what is restored (current_shape and show() registry). This is a specific verb and resource, differentiating from sibling tools.

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

Usage Guidelines4/5

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

Description provides context on when to use: to revert geometric state while preserving variable namespace. It also mentions error on non-existent snapshot. However, it does not explicitly compare to alternatives like diff_snapshot.

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

save_drawing_annotationsA

Write a .dims.json sidecar file alongside an SVG with label metadata.

build123d renders Text as filled glyph paths, not <text> SVG elements, so
label strings are irrecoverable from a finished SVG. Call this tool after
completing a drawing (annotate all dims/leaders with annotate()) and before
or after exporting the SVG. The sidecar is read automatically by
inspect_drawing(svg_path=...) to restore annotation content.

Workflow:
    1. Build your drawing with Dimension / Leader / annotate()
    2. Export SVG:  execute("exporter.write('drawing.svg')")
    3. Save metadata: save_drawing_annotations("drawing.svg")
    4. Inspect later: inspect_drawing(svg_path="drawing.svg")
       → includes full annotations dict from the sidecar

Args:
    svg_path: path to the SVG file (sidecar written as <svg_path>.dims.json).
ParametersJSON Schema
NameRequiredDescriptionDefault
svg_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds that the tool writes a sidecar file (non-destructive write) and explains the file naming convention (<svg_path>.dims.json). It also describes how the sidecar is used by inspect_drawing. This provides good behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is approximately 150 words, well-structured with sections for purpose, why needed, workflow, and args. It is front-loaded with the core purpose and every sentence adds value. No unnecessary repetition or fluff.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, no nested objects, output schema exists), the description is complete. It explains the sidecar file, workflow steps, and the relationship with inspect_drawing. An agent has enough information to invoke the tool correctly in the intended context.

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

Parameters4/5

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

The description includes an 'Args' section that adds value to the schema: it explains that svg_path is the path to the SVG file and that the sidecar is written as <svg_path>.dims.json. This clarifies the parameter's purpose and the naming convention, improving on the schema's minimal definition.

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

Purpose5/5

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

The description clearly states the tool writes a .dims.json sidecar file alongside an SVG with label metadata. It explains why this is necessary (build123d renders Text as filled glyph paths, making label strings irrecoverable) and distinguishes from sibling tools like inspect_drawing which reads the sidecar.

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

Usage Guidelines4/5

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

The description provides a clear workflow: build drawing, export SVG, save annotations, inspect later. It specifies when to call (after completing a drawing and before/after exporting) and prerequisites (annotate() for all dims/leaders). However, it does not explicitly state when not to use or mention alternatives, though the workflow implicitly guides usage.

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

save_snapshotA
Idempotent

Save a named checkpoint of the current geometric state (current_shape and the show() object registry). The Python variable namespace is NOT saved — only geometry. Call this before risky experiments so you can restore known-good geometry without re-running all prior execute() calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide idempotentHint=true and destructiveHint=false. Description adds context about what is saved (geometry only) and what is not (variables), but does not clarify behavior on duplicate names or error conditions.

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

Conciseness4/5

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

Description is concise and front-loaded, but could be slightly more compact without losing clarity.

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

Completeness4/5

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

Given the tool's simplicity, the description covers purpose, usage guidance, and behavioral caveats. Lacks details on overwrite behavior, but overall adequate.

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

Parameters2/5

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

Only one parameter (name) with 0% schema coverage. Description mentions 'named checkpoint' but provides no details on name format, uniqueness, or constraints.

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

Purpose5/5

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

Description clearly states it saves a named checkpoint of geometric state, distinguishing it from restore_snapshot and diff_snapshot. It specifies that only geometry is saved, not Python variables.

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

Usage Guidelines5/5

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

Explicitly states when to use (before risky experiments) and what it does not save (Python variable namespace). Alternates are implied by sibling tools (restore_snapshot).

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

scriptA
Read-only

Return a single Python script assembled from all successfully executed code blocks in this session. Prepends 'from build123d import *' if not already present. If save_to is given, writes the script to that path and returns {script_path, blocks}; otherwise returns {script, blocks}. Useful for exporting a reproducible script after an interactive session.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_toNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

The description adds key behavioral details beyond the readOnlyHint annotation: it prepends an import, optionally writes to a file, and returns different objects based on the parameter. The file write is a side effect, but it's clearly disclosed and doesn't contradict the annotation (which likely refers to internal state).

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

Conciseness5/5

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

The description is three short sentences with no wasted words. It front-loads the core purpose, then adds key details, making it easy to parse quickly.

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

Completeness4/5

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

The description covers the main behavior, parameter effect, and return types. It could mention the case of no executed code blocks, but the tool is simple enough that this is a minor omission.

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

Parameters5/5

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

The schema has 0% description coverage, but the description fully explains the parameter 'save_to'—its effect on behavior and return value—adding semantic meaning that the schema lacks.

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

Purpose5/5

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

The description clearly states the tool returns a single Python script from executed code blocks, with a specific verb and resource. It differentiates from siblings like 'execute' or 'export' by focusing on assembling code, not running or saving files generically.

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

Usage Guidelines4/5

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

It explicitly mentions the tool is 'useful for exporting a reproducible script after an interactive session,' providing clear guidance on when to use. While it doesn't mention when not to use or alternatives, the context is sufficient for an agent to decide.

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

session_stateA
Read-only

Return a structured JSON snapshot of the current session: current_shape metrics, all named objects (replaces list_objects) with geometry stats, snapshot names, and a variables summary of the Python namespace (type + volume for shapes, type + length for collections, type + value for scalars). Use this to orient after a reset, restore, or multi-step build to confirm what geometry and variables are active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true. Description adds that it returns a structured JSON snapshot with detailed breakdown of session state, which is fully transparent. No contradictions.

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

Conciseness5/5

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

Two well-structured sentences that front-load the purpose and provide additional context. Every sentence is informative with no redundancy.

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

Completeness5/5

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

Given no parameters, high schema coverage, and presence of output schema, the description fully covers when to use, what it returns, and its purpose. Complete for the tool's complexity.

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

Parameters4/5

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

No parameters in schema, and description confirms no parameters needed. Baseline 4 as per guidelines.

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

Purpose5/5

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

Description clearly states 'Return a structured JSON snapshot of the current session' with specific contents (shape metrics, named objects, snapshot names, variables summary). It also distinguishes itself from sibling tool list_objects by saying it replaces it.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Use this to orient after a reset, restore, or multi-step build to confirm what geometry and variables are active.' Also mentions it replaces list_objects, giving an alternative.

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

suggest_view_layoutA
Read-only

Auto-calculate safe VIEW_X / VIEW_Y positions for a multi-view engineering drawing.

Measures the named shape's bounding box and returns per-view page positions
(VIEW_X, VIEW_Y), look_at values, and camera/up vectors for a standard
third-angle layout:

    [plan ]  [      ]
    [front]  [ side ] [ iso ]
                      [ title block (bottom-right) ]

Returns JSON with:
  views: {name: {VIEW_X, VIEW_Y, half_w, half_h, look_at, camera, up}}
  free_space: {name: {above/below: {x, y, h}, left/right: {x, y, w}}} — the
    empty rectangle outside each view edge, bounded by neighbouring views,
    the title block, and the margins; budget dimension tiers (n × tier
    pitch must fit in h/w) before placing annotations
  warnings: list of layout problems (out-of-bounds, title-block overlap)
  suggestion: recommended page_w/page_h/scale if the layout does not fit

object_name: name from show() — use "" to measure the current shape
page_w/page_h: sheet size in mm (default A4 landscape 297×210)
scale: drawing scale factor (default 1.0; use 2.0 for 2:1)
views: subset of ["front","plan","side","iso"] to place
title_block_w/h: reserved bottom-right area (default 150×30 mm)
margin: page margin in mm (default 10)
extents: [x, y, z] part sizes in mm — lays out from these numbers instead
    of a session object (use when the part isn't loaded, e.g. import failed)
centroid: [x, y, z] look_at origin when using extents (default [0, 0, 0])

Accuracy: front/plan/side positions are exact for orthographic projection.
Iso position is approximate (75% of 3-D diagonal as half-extent) — verify
with render_view() and adjust manually if the iso overlaps a neighbour.
ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNo
viewsNo
marginNo
page_hNo
page_wNo
extentsNo
centroidNo
object_nameNo
title_block_hNo
title_block_wNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description does not need to restate that. It adds valuable behavioral context: returns positions, free space, warnings, and a suggestion. Importantly, it notes accuracy limitations ('Iso position is approximate') and advises verification with render_view(). This goes beyond the annotation.

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

Conciseness4/5

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

The description is front-loaded with the purpose and a visual layout diagram, then the return structure, then parameter details. It is relatively long due to complexity but every part adds value. Could be slightly more concise, but the structure aids readability.

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

Completeness5/5

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

Given the tool's complexity (10 parameters, no required, output schema exists), the description covers all aspects: purpose, layout pattern, output format, detailed parameter explanations, and accuracy caveats. It is thorough and leaves little ambiguity for an AI agent to correctly invoke and interpret results.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining all 10 parameters in context. It describes object_name, page_w/h, scale, views, title_block_w/h, margin, extents, centroid, and their purposes, including use cases like extents for unloaded parts. This provides clear semantic meaning beyond the schema's name and type.

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

Purpose5/5

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

The description clearly states 'Auto-calculate safe VIEW_X / VIEW_Y positions for a multi-view engineering drawing', specifying a specific action (calculate) and resource (positions). It further details the output and layout pattern, distinguishing it from all sibling tools that focus on other aspects like alignment, clearance, or rendering.

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

Usage Guidelines3/5

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

The description implies usage when needing to place views on a drawing and mentions a conditional use case for extents when part is not loaded. However, it lacks explicit guidance on when to use this tool versus alternatives, or when not to use it. No direct exclusions or comparisons to sibling tools are provided.

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

validateA
Read-only

Check whether a shape would pass a CAD validity gate before exporting it. Returns a PASS/FAIL verdict plus JSON (passes_gate, n_solids, volume, is_manifold, brep_valid, reasons). The gate mirrors what CAD scorers and downstream tools require: a well-formed (BRepCheck), watertight, manifold solid with non-zero volume. A FAIL means a STEP/STL export would be rejected outright (e.g. CADGenBench scores it zero) — common causes are a leftover 2D sketch or open shell as the current shape, an un-fused compound, or a degenerate boolean result. Run this immediately before export() on any part you intend to submit or hand off. object_name: named object from show() (default: current shape).

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

The description adds significant behavioral details beyond the readOnlyHint annotation: it explains the gate conditions (watertight, manifold, non-zero volume), common failure causes, and the consequences of a FAIL. It also lists the exact JSON fields returned, which is not in the annotations.

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

Conciseness4/5

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

The description is front-loaded with the purpose and return type, followed by gate details and usage instructions. It is concise (6 sentences) without superfluous text, though some sentences are lengthy.

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

Completeness4/5

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

The description covers the tool's purpose, when to use it, return values, and parameter. With the output schema present, the return structure is well-documented. However, it does not explain all possible failure reasons exhaustively, but provides common ones.

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

Parameters5/5

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

Despite 0% schema description coverage, the description documents the sole parameter 'object_name' meaningfully: it is a named object from show() with default being the current shape. This fully compensates for the lack of schema documentation.

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

Purpose5/5

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

The description clearly states the tool's purpose: to check if a shape passes a CAD validity gate before export. It specifies the return type (PASS/FAIL verdict plus JSON) and distinguishes it from the sibling 'export' tool by stating it should be run immediately before export.

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

Usage Guidelines4/5

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

The description explicitly says to run this tool immediately before export() on any part intended for submission. This provides clear context for when to use it, though it does not contrast with alternative tools like 'locate_gate_defects' which might serve a similar purpose.

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

versionA
Read-only

Return the installed versions of the build123d-mcp server, its key dependencies (build123d, build123d-drafting-helpers), and the companion packages importable inside execute() (bd_warehouse for threads/fasteners/gears/bearings, augura for printability analysis). Use this to confirm which server build is running — e.g. to check whether a feature or fix is present, or whether the client is talking to a stale install.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already mark it as read-only. The description adds value by specifying what versions are returned (server, dependencies, companion packages). No negative behaviors need disclosure.

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

Conciseness5/5

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

Two sentences, front-loaded with what the tool returns, followed by usage. Every word earns its place; no redundancy.

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

Completeness5/5

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

Given zero parameters, readOnlyHint annotation, and an output schema, the description fully covers what the tool does and when to use it.

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

Parameters4/5

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

No parameters, so no additional parameter info needed. Baseline 4 applies as per rubric for 0 parameters.

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

Purpose5/5

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

The description clearly states it returns installed versions of the server and its key dependencies, listing specific packages. It distinguishes from sibling tools by focusing on version information.

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

Usage Guidelines5/5

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

Explicitly provides use cases: confirm which server build is running, check for features/fixes, or detect a stale install. This gives clear guidance on when to invoke the tool.

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

view_axesA
Read-only

Return the world→page axis mapping for a project_to_viewport call, computed analytically (no projection performed). Use this BEFORE rendering a projected view to confirm which world axis ends up on which page axis and with what sign — catches bottom-view/side-view axis swaps before they show up in the render.

Returns JSON like {"world_X": ["page_X", -1.0], "world_Y": ["page_Y", 1.0],
"world_Z": ["depth", 0.0]} — for a bottom-view origin (0,0,-100), world-X
flips to negative page-X.

Args:
    viewport_origin: camera position, same arg as project_to_viewport.
    viewport_up: up vector. Defaults to (0,1,0).
    look_at: target point. Defaults to origin.
ParametersJSON Schema
NameRequiredDescriptionDefault
look_atNo
viewport_upNo
viewport_originYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: 'computed analytically (no projection performed)' and shows an example output with sign flips. This goes beyond annotations to explain the computation nature.

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

Conciseness4/5

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

The description is well-structured: first sentence states purpose, second gives usage context, third shows example output, then Args. It is front-loaded and concise, though the example output could be slightly trimmed without losing clarity.

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

Completeness5/5

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

Given that there is no output schema shown, the description fully compensates with a clear example JSON output. It covers all 3 parameters (1 required), provides defaults, and links to a sibling. The tool is simple, and the description leaves no ambiguity.

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

Parameters4/5

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

Schema description coverage is 0%, but the description includes an 'Args:' section with brief descriptions for all three parameters. It links viewport_origin to the sibling project_to_viewport and specifies defaults for viewport_up and look_at, adding meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool returns the world-to-page axis mapping, computed analytically. It explicitly says 'Use this BEFORE rendering a projected view' and describes catching axis swaps, which distinguishes it from sibling tools like render_view or align_check.

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

Usage Guidelines4/5

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

The description provides clear context: 'Use this BEFORE rendering a projected view' and explains the benefit of catching axis swaps early. It does not explicitly mention when not to use it or list alternatives, but the context is strong enough for an agent to understand its purpose relative to siblings.

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

workflow_hintsA
Read-only

Return guidance on how to use these tools effectively. Call this at the start of a session or whenever unsure which tool to reach for.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true; description reaffirms it returns guidance, consistent and sufficient for this simple case.

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

Conciseness5/5

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

Two concise sentences with front-loaded purpose and usage instructions, no filler.

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

Completeness5/5

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

Tool has no parameters, annotations cover safety, output schema exists, and description covers purpose and usage completely.

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

Parameters4/5

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

No parameters, so schema coverage is 100%. Description does not need to add parameter details.

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

Purpose5/5

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

The description clearly states the tool returns guidance on using other tools, which is a specific verb and resource. It distinguishes itself from sibling tools that perform other actions.

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

Usage Guidelines5/5

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

Explicitly advises calling at start of session or when unsure which tool to use, providing clear context and implying alternatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.3.82
    • Addeddestroy_session
    • Addedinspect_part
    • Addedlist_sessions
  2. 5 tool updatesv0.3.75
    • Removedalign_check
    • Removedclearance
    • Addedcompare
    • Removeddiff_snapshot
    • Removedshape_compare
  3. 2 tool updatesv0.3.74
    • Addedfind_bored_bosses
    • Addedrepair_advice
  4. 4 tool updatesv0.3.68
    • Removedload_part
    • Removedsearch_library
    • Removedsuggest_spec
    • Removedverify_spec
  5. 4 tool updatesv0.3.65
    • Addeddesign_audit
    • Addedfind_countersinks
    • Addedsuggest_spec
    • Addedverify_spec
  6. 1 tool updatev0.3.59
    • Addedlocate_gate_defects
  7. 1 tool updatev0.3.51
    • Addedvalidate
  8. 7 tool updatesv0.3.49
    • Changedanalyze_printability2 fields changed
      • addedInput schema / properties / bed_tol
        Added value: +{
        +  "default": 0.001,
        +  "title": "Bed Tol",
        +  "type": "number"
        +}
      • addedInput schema / properties / min_feature
        Added value: +{
        +  "default": 0.5,
        +  "title": "Min Feature",
        +  "type": "number"
        +}
    • Addedfind_bosses
    • Addedfind_hole_patterns
    • Addedfind_holes
    • Changedinstall_skill1 field changed
      • addedInput schema / properties / skill
        Added value: +{
        +  "default": "drawing",
        +  "title": "Skill",
        +  "type": "string"
        +}
    • Removedinterference
    • Changedmeasure2 fields changed
      • addedInput schema / properties / density
        Added value: +{
        +  "default": 0,
        +  "title": "Density",
        +  "type": "number"
        +}
      • addedInput schema / properties / material
        Added value: +{
        +  "default": "",
        +  "title": "Material",
        +  "type": "string"
        +}
  9. 1 tool updatev0.3.43
    • Changedsuggest_view_layout4 fields changed
      • addedInput schema / properties / centroid
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Centroid"
        +}
      • addedInput schema / properties / extents
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Extents"
        +}
      • addedInput schema / properties / object_name / default
        Added value: +""
      • removedInput schema / required
        Removed value: -[
        -  "object_name"
        -]
  10. 4 tool updatesv0.3.42
    • Addedanalyze_printability
    • Changedlint_drawing1 field changed
      • addedInput schema / properties / view_shape_names
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "View Shape Names"
        +}
    • Addedsuggest_view_layout
    • Changedview_axes8 fields changed
      • addedInput schema / properties / look_at / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / look_at / default
        Previous value: -[
        -  0,
        -  0,
        -  0
        -]New value: +null
      • removedInput schema / properties / look_at / items
        Removed value: -{
        -  "type": "number"
        -}
      • removedInput schema / properties / look_at / type
        Removed value: -"array"
      • addedInput schema / properties / viewport_up / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / viewport_up / default
        Previous value: -[
        -  0,
        -  1,
        -  0
        -]New value: +null
      • removedInput schema / properties / viewport_up / items
        Removed value: -{
        -  "type": "number"
        -}
      • removedInput schema / properties / viewport_up / type
        Removed value: -"array"

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clear and distinct purpose: analysis tools (e.g., find_holes, analyze_printability) are separate from measurement (measure, clearance), drawing tools (inspect_drawing, lint_drawing) are distinct from session management (save_snapshot, session_state). No two tools appear to do the same thing.

Naming Consistency5/5

All tool names use a consistent verb_noun pattern in lowercase snake_case (e.g., align_check, find_holes, render_view). There is no mixing of conventions or ambiguous naming.

Tool Count4/5

With 36 tools, the server covers a broad range of CAD operations, analysis, drawing, and session management. While slightly above the typical well-scoped range (3-15), each tool serves a specific need and the count is justified by the domain complexity.

Completeness5/5

The tool surface covers the full lifecycle: shape creation (via execute), measurement, validation, export, import, detailed geometric analysis (holes, bosses, patterns, printability, alignment), drawing creation and inspection, session management, and debugging aids. There are no obvious gaps for the stated purpose.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to render 3D models from OpenSCAD code, generating single views or multiple perspectives with full camera control. Supports animations, custom parameters, and returns base64-encoded PNG images for seamless integration.
    15
    128
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-driven 3D model generation and manipulation using OpenSCAD through natural language commands. Users can create primitives, apply transformations, perform boolean operations, and export models to various formats like STL and OBJ.
    18
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that exposes CAD geometry reasoning over STEP files to LLMs, allowing natural language queries about parts, assemblies, dimensions, holes, and mass properties.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for FreeCAD that enables AI assistants to create and manipulate 3D models via natural language.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pzfreo/build123d-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server