Skip to main content
Glama

TianshangCAD

A modern CAD CLI + MCP Server system. 2D/3D drawing, editing, measurement, validation and JSON-driven workflows are available both from the command line and as standardized tools callable by any MCP client (AI agent).

TianshangCAD MCP server

MCP Score CI Python Version License Tests Coverage

Status: v0.13.0 — plugin SDK + gltf/cam example plugins; 20 core aggregate tools (+ 2 plugin tools). 1065 tests passing, ~85% coverage (measured with optional extras installed), ruff and mypy clean.

中文文档: readme/README.zh-CN.md

Changelog · Migration guide v0.6.0 → v0.9.0

Features

  • CAD CLIfile, draw, edit, view, measure, layer, batch command groups with short aliases (l = draw line, c = draw circle, ...)

  • MCP Server — 20 core JSON-RPC aggregate tools (each with an action discriminator) over stdio, streamable HTTP or WebSocket (collaboration), callable from Claude, Cursor and other MCP clients

  • Plugin ecosystem — plugin SDK (manifest + permissions + lifecycle + entry-point discovery) with two official plugins: plugin-gltf (glTF 2.0 import/export) and plugin-cam (2.5-axis toolpaths → G-code), exposing cad_gltf / cad_cam

  • 3D views — JSON-defined View3DDefinition with spherical camera pose, named views (iso / top / front / side / back / bottom), perspective / orthographic projection, plane sections (XY / YZ / XZ), exploded views and orbit GIF animation; incremental WebGL delta sync for browser clients

  • Batch automation — schedule one-off / cron / dependency-chained jobs, sandboxed Python / SCR / batch script execution, webhook notifications, SQLite persistence and reusable Jinja2 command templates

  • Geometry validation — self-intersection, degenerate-face and non-manifold-edge checks with structured type / location / fix_suggestion diagnostics; box-box interference volumes; topology metrics

  • Rendering — 2D orthographic PNG (top / front / side, DPI 72–300), shaded 3D preview and Three.js WebGL export with a bundled browser viewer

  • Versioning — full document snapshots with deepdiff-based save / list / diff / restore

  • Natural languagecad_nlp maps English / Chinese requests to tool calls with ambiguity handling

  • JSON-driven — scenes and geometry defined and validated with Pydantic schemas; full import/export round-trip

  • Pluggable kernel — analytic (default, no native deps) / OCC (cadquery) / FreeCAD

  • File IO — JSON, DXF, STL (STEP via the OCC backend)

  • Production hardening — Docker image with healthcheck, Prometheus metrics (/metrics), API-key authentication (401/403), sliding-window rate limiting (429) and a /health endpoint

  • Quality gatesmypy strict typing, ruff linting, pytest with a 80% coverage floor; GitHub Actions CI runs lint + tests on every push. The reported ~87% coverage assumes the optional extras (boolean, solver, occ, collab, sim) are installed; the base pip install -e . suite measures lower.

Related MCP server: build123d-mcp

Install

python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux / macOS
source .venv/bin/activate

pip install -e ".[dev]"

The [sim] extra (pip install -e '.[sim]') provides FEA and kinematics. CalculiX FEA requires the ccx solver binary installed separately; install it from calculix.de and ensure ccx is in PATH.

Self-contained Debian package (Linux amd64, bundles all runtime wheels — no network access needed at install time):

wget <release>/tianshangcad_<version>_amd64.deb
sudo dpkg -i tianshangcad_<version>_amd64.deb

Optional OCC kernel:

pip install -e ".[occ]"

CLI Usage

tianshangcad --version
tianshangcad file new design.json --unit mm
tianshangcad draw line 0,0 100,0
tianshangcad draw circle 50,50 --radius 25
tianshangcad draw box 0,0,0 --dimensions 100,50,30
tianshangcad edit move line_1 --dx 50
tianshangcad view zoom --extents
tianshangcad measure distance 0,0 100,100

Short aliases are expanded automatically: tianshangcad l 0,0 100,0 equals tianshangcad draw line 0,0 100,0. tianshangcad --version prints the current version (e.g. tianshangcad 0.12.0).

Command groups

Group

Commands

file

new, open, save, close, list, info, export, import

draw

line, circle, arc, rectangle, polygon, polyline, box, cylinder, sphere

edit

move, copy, rotate, scale, erase, list, undo, redo

view

zoom, pan, list

measure

distance, area, list

layer

create, list, set, on, off, delete

render

view, 3d, webgl, view3d, section, explode, gif, views, status

batch

schedule, run-script, list, status, cancel, templates, logs

MCP Server

Run the server and connect any MCP client to it.

stdio (local agents)

python -m tianshangcad --transport stdio

Streamable HTTP

python -m tianshangcad --transport http --host 127.0.0.1 --port 8081

The server then serves MCP at http://127.0.0.1:8081/mcp, exposes a health check at /health and Prometheus metrics at /metrics.

When an API key is configured (via the TIANSHANGCAD_API_KEYS env var, comma-separated), HTTP requests must send it as x-api-key or Authorization: Bearer <key>: missing keys get 401, invalid keys get 403. Requests are also subject to a sliding-window rate limit (default 100 requests / 60 s, configurable via TIANSHANGCAD_RATE_LIMIT_MAX and TIANSHANGCAD_RATE_LIMIT_WINDOW); exceeding it returns 429. /health and /metrics are always public. stdio mode is unaffected.

Tool Search (progressive discovery)

tools/list accepts an optional query string and returns only the tools whose name or description matches, so clients can progressively discover the right tool before calling it:

tools/list  {"query": "measure"}   -> [cad_measure, cad_object, cad_status, cad_validate]  (cad_measure first)
tools/list  {"query": "layer"}     -> [cad_layer, cad_status]  (cad_layer first)
tools/list  {}                     -> all 22 tools (20 core + cad_gltf + cad_cam)

Name matches rank highest, then description matches; multi-word queries require every token to match; stopword-only queries match nothing.

Tools (20 core aggregate + 2 plugin)

Group

Tools

Files

cad_file (action: create/open/save/close/delete/list/import/export)

Objects

cad_object (action: create/read/update/delete/copy/transform/list/boolean)

Layers

cad_layer (action: create/read/update/delete/list)

JSON

cad_json (action: load/parse/validate/save/import_geometry/export_geometry/import_scene/export_scene)

Measure

cad_measure (action: distance/area)

Validate

cad_validate (action: geometry/interference/topology/metrics)

Status

cad_status (target: check/file/object/layer/health/logs_get/logs_clear)

Render

cad_render (mode: ortho/view_3d/section/explode/animation/webgl)

3D Views

cad_view (action: create/read/list/update/delete)

NLP

cad_nlp (action: command/chat)

Version

cad_version (action: save/list/diff/restore)

Variables

cad_variable (action: set/list)

Batch

cad_batch (action: execute/schedule/status/cancel/list/templates/run_script)

Constraints

cad_constraint (action: add/remove/list/solve)

Assembly

cad_assembly (action: create/add_part/add_subasm/add_mate/remove_part/solve/bom/explode)

Drawing

cad_drawing (action: create/add_view/add_section/add_dimension/add_tolerance/delete/export)

Features

cad_feature (action: sweep/loft/fillet/chamfer/pattern_linear/pattern_circular/pattern_mirror)

Simulation

cad_sim (action: mesh/setup/run/result/list/delete)

Collaboration

cad_collab (tool: session/branch/annotation/presence/history/resolve/permission/sync)

Plugins

cad_plugin (action: install/uninstall/list/enable/disable/manifest)

glTF (plugin)

cad_gltf (action: export/import/preview)

CAM (plugin)

cad_cam (action: toolpath/simulate/export_gcode)

Validation, rendering, 3D views & NLP

Validate geometry with structured diagnostics, render orthographic views, snapshot and restore document versions, drive tools from natural language, and create named 3D views with camera, section, explode and animation:

# Render a 300 DPI top view PNG
tianshangcad render view --view top --dpi 300 --output preview.png
tianshangcad render 3d --output preview3d.png
tianshangcad render webgl --output viewer_data.json --viewer examples/threejs_viewer.html

# 3D views
tianshangcad render view3d iso --output iso.png
tianshangcad render section XY --offset 0 --output section.png
tianshangcad render explode --scale 1.5 --output explode.png
tianshangcad render gif --frames 48 --output orbit.gif
tianshangcad render views

# NLP examples (via the MCP tool cad_nlp)
"new file design.dwg"        -> cad_file  {file: {action: create, filename: design.dwg}}
"draw a line from 0,0 to 10,10" -> cad_object  {object: {action: create, type: line, params: {...}}}
"render the side view"       -> cad_render  {render: {mode: ortho, view: side}}
"save a version"             -> cad_version  {version: {action: save}}

cad_nlp (action=chat) adds multi-turn dialogue with anaphora resolution: each session_id remembers the last created object so later turns can refer to it with pronouns or descriptions. Create intents are executed against the current document, so "it" / "它" resolves to the real object id.

# Turn 1: draw a circle (creates the object, records it in the session)
"draw a circle at 5,5 radius 3"   -> cad_object, object_id tracked
# Turn 2: move the referenced circle (same session_id)
"move it to 10,10"                -> cad_object {object: {action: update, object_id, params}}
"move the circle I just drew to 3,3" -> same, explicit anaphora
"把它移到 4,4"                     -> same, Chinese pronoun

Version diffing uses deepdiff and reports changed fields, added/removed items and the raw result. The WebGL export writes Three.js BufferGeometry JSON consumable by examples/threejs_viewer.html. View definitions (camera pose, projection, section/explode parameters) are persisted with the document and are also exposed as MCP tools (cad_view for view definitions, cad_render for section / explode / animation / webgl modes).

Real-time collaboration

Phase 9 collaboration builds on the LWW-Map CRDT: a session holds the shared document state as keyed registers (geometry / layers / variables / constraints / assembly), with 4-role × 4-scope RBAC (viewer / editor / admin / owner over document / scene / assembly / settings). Sessions support presence, annotations, document branches (fork / edit / merge with explicit conflict resolution) and a transport-agnostic sync primitive:

# Optional dependency for the WebSocket hub
pip install -e ".[collab]"

tianshangcad collab create --name review        # seed a session over the current doc
tianshangcad collab list
tianshangcad collab annotate <session_id> "check the hole"
tianshangcad collab perm <session_id> bob --role editor

# WebSocket transport (default port 8082)
python -m tianshangcad --transport ws --port 8082

MCP clients use cad_collab_session, cad_collab_branch, cad_collab_annotation, cad_collab_presence, cad_collab_history, cad_collab_resolve, cad_collab_permission and cad_collab_sync. WebSocket clients speak a small JSON envelope (subscribe / op / sync / ping) that maps onto the sync tool. A multi-client hub fans an applied op out as a deltas broadcast to every subscriber of the same session (excluding the origin sender, which already received its live response).

Batch & automation

Schedule jobs with a standard 5-field cron expression, dependency chains and webhook notifications; run scripts through a sandboxed engine; persist job state to SQLite:

# One-off job
tianshangcad batch schedule commands.json --name report

# Cron job (daily at 02:00) using a built-in template
tianshangcad batch schedule commands.json --cron "0 2 * * *"

# Run a sandboxed Python script
tianshangcad batch run-script script.py --type python --timeout 30

# Inspect results
tianshangcad batch list
tianshangcad batch status <job_id>
tianshangcad batch logs --source batch --job-id <job_id>

Scripts run in an isolated subprocess (python -I) with an import whitelist (os, subprocess, socket, ... are blocked), a runtime sys.modules guard and a hard timeout.

Plugins

Plugins extend the server with new MCP tools and CLI commands. The SDK (core/plugins/) provides a manifest + permission declaration, a load → initialize → run → shutdown lifecycle and four extension points (tools / commands / kernel / solver). Plugins are discovered from the tianshangcad.plugins entry-point group of installed distributions.

tianshangcad plugin list                    # discover + list
tianshangcad plugin enable <name>           # enable / disable
tianshangcad plugin manifest <name>         # inspect the manifest

Two official plugins ship with the package:

  • plugin-gltf — glTF 2.0 import/export (PBR materials); cad_gltf, gltf CLI.

  • plugin-cam — 2.5-axis contour + drilling toolpaths to G-code; cad_cam, cam CLI.

Security: plugins run in-process, in the same trust domain as the server, and are not sandboxed. The MCP cad_plugin install action only loads plugins from installed distributions' entry-points (it never imports an arbitrary module:attr path); only install plugins from trusted sources. Process-level sandboxing is a future hardening step.

Docker

A multi-stage image (< 500 MB, python:3.12-slim) is provided in docker/ for headless deployment:

docker compose -f docker/docker-compose.yml up -d

The container runs the MCP server over streamable HTTP on port 8081 with a /health healthcheck, and mounts data/ + config/ volumes. Environment overrides: TIANSHANGCAD_RUNTIME, TIANSHANGCAD_HEADLESS, TIANSHANGCAD_TEMP_DIR, TIANSHANGCAD_API_KEYS, TIANSHANGCAD_LOG_LEVEL, TIANSHANGCAD_RATE_LIMIT_MAX, TIANSHANGCAD_RATE_LIMIT_WINDOW.

Example MCP client configuration (Claude Desktop ~/.config/claude/mcp.json):

{
  "mcpServers": {
    "cad-server": {
      "command": "python",
      "args": ["-m", "tianshangcad", "--transport", "stdio"],
      "autoApprove": [
        "cad_json",
        "cad_measure",
        "cad_render",
        "cad_validate"
      ]
    }
  }
}

Development

bash scripts/setup_dev.sh   # venv + editable install + stubs
bash scripts/run_tests.sh   # ruff + mypy + pytest (coverage gate >= 80%)
bash scripts/build_docs.sh

Or run each gate directly:

ruff check .   # lint
mypy src       # type check
pytest         # tests (coverage gate >= 80%)

Benchmark harness (CADGenBench)

scripts/cadgenbench_harness.py is an offline demo harness that drives the real MCP server over stdio to build a small set of 3D parts, export them as STEP, and run a local validity check (watertight manifold) mirroring CADGenBench's scoring gate -- no external API or HuggingFace token needed:

python scripts/cadgenbench_harness.py            # analytic AP203 exporter
python scripts/cadgenbench_harness.py --occ      # OCCT kernel path
# Results: dist/cadgenbench/run_summary.json

To turn this into a real CADGenBench submission, read a sample's description.yaml, let an LLM choose the tool calls with this server as the backend, and upload the resulting output.step candidates to the leaderboard Space.

Project Layout

src/tianshangcad/
|-- cli/            # typer CLI: commands + alias expansion
|-- mcp/            # MCP server, transports, security and tool registry
|   |-- server.py       # MCPServer wiring (20 core tools + plugin discovery)
|   |-- transport.py    # stdio / streamable HTTP (+ auth, rate limiting)
|   |-- security.py     # tool permission whitelist
|   |-- auth.py         # API-key authentication
|   |-- rate_limit.py   # sliding-window rate limiter
|   `-- tools/          # crud, json_ops, status, validate, batch, boolean,
|                       # file_io, variables, render, versioning, nlp, view3d,
|                       # features, simulation
|-- core/           # document, entity, layer, kernel, session, history,
|                   # variables, scheduler, script_runner, batch_templates,
|                   # validation, versioning, view_manager, features, simulation,
|                   # assembly, drawing, constraint, plugins (SDK + manager)
|-- plugins/        # official example plugins: gltf (glTF 2.0), cam (2.5-axis)
|-- io/             # JSON / DXF / STL importers and exporters
|-- schemas/        # Pydantic geometry, scene and view3d schemas
|-- render/         # 2D / 3D PNG rendering, WebGL export, section, explode,
|                   # animation
`-- utils/          # logger, config, errors, validators, units, metrics
examples/
`-- threejs_viewer.html  # browser viewer for WebGL exports
docker/
|-- Dockerfile          # multi-stage image (python:3.12-slim)
|-- docker-compose.yml  # service definition with healthcheck
`-- entrypoint.sh
tests/
|-- unit/           # CLI, core, IO, MCP tool unit tests
`-- integration/    # MCP e2e, batch, JSON workflow and performance tests

Documentation

  • readme/README.zh-CN.md — Chinese README

Continuous Integration

.github/workflows/ci.yml runs ruff + mypy on every push / PR, pytest with the 80% coverage gate on Python 3.12, and a separate stress job for the concurrency / soak suite. Pushing a v* tag triggers .github/workflows/release.yml, which builds the Windows executables (tianshangcad.exe, tianshangcad-server.exe via PyInstaller) and the self-contained Debian package (scripts/build_deb.py, bundles runtime wheels for Linux amd64) and publishes them to a GitHub Release.

License

Apache License 2.0 — see LICENSE.

Community guidelines: Code of Conduct · Security: SECURITY.md · Contributing via pull requests is welcome.

Third-party runtime dependencies are all permissive-licensed (MIT / BSD / Apache-2.0 / ISC / PSF, plus MPL-2.0 for certifi); the full inventory is in THIRD_PARTY_LICENSES.md.

Optional backends: cadquery (Apache-2.0) is compatible. The optional FreeCAD / OpenCASCADE backends are LGPL-2.1 and are not bundled; if you enable them you must comply with the LGPL (retain notices, keep the library re-linkable). The default AnalyticKernel is self-authored and fully Apache-2.0.

Available Tools

22 tools
cad_assemblyA
Destructive

Create, edit, solve or analyze an assembly.

聚合装配操作。按 ``action`` 派发:create / add_part / add_subasm /
add_mate / remove_part / solve / bom / explode。
- ``create``: initialize the document's assembly container.
- ``add_part`` / ``add_subasm``: build the tree; parts may reference a
  document ``entity_id`` and nest under a ``parent_id``.
- ``add_mate``: constrain two nodes (coincident / concentric / parallel /
  perpendicular / distance / angle).
- ``solve``: apply mates in order and return every node's world transform.
- ``bom``: flattened bill of materials (``format`` json or csv).
- ``explode``: radial offsets by tree depth (``direction`` x/y/z).

When not to use: ``cad_assembly`` composes *parts*, not geometry. Create
part geometry first with ``cad_object`` (create), then add it to the
assembly. For drawings of an assembly use ``cad_drawing``.
ParametersJSON Schema
NameRequiredDescriptionDefault
assemblyYesAssembly action to perform, discriminated by `action`: create, add_part, add_subasm, add_mate, remove_part, solve, bom or explode.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bomNoBOM rows
csvNoCSV text when requested
nameNoAssembly / node name
actionYesAssembly action executed
statusYesOperation status
mate_idNoMate identifier
messageNoStatus description
node_idNoAssembly node identifier
recordsNoExploded positions
mate_typeNoMate type
mate_countNoNumber of mates solved
part_countNoTotal number of parts
transformsNoWorld transform of every node
assembly_idNoAssembly identifier

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, and the description does not contradict it. The description adds meaningful behavioral context beyond annotations, such as 'solve applies mates in order and returns world transforms' and 'explode uses radial offsets by tree depth'. However, it does not explicitly warn about destructive or irreversible aspects of remove_part, leaving that to the schema.

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

Conciseness5/5

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

The description is well-structured with a bulleted action list and a clear 'When not to use' section. Each line is concise and informative, with no filler. The length is appropriate for a multi-action tool and the most important information is 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?

The description covers all eight actions, gives usage guidance, and clarifies the tool's role relative to siblings. The rich schema and output schema cover parameter details and return values. The description is fully adequate for an agent to select and invoke this 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 coverage is 100%, so baseline is 3, but the description adds value by explaining the purpose of key actions and their parameters (e.g., 'bom format json or csv', 'explode direction x/y/z'). It complements rather than repeats the schema, so a 4 is warranted.

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 'Create, edit, solve or analyze an assembly' – a specific verb+resource statement. It then enumerates each action (create/add_part/solve/etc.), and differentiates from sibling tools by stating it composes parts rather than geometry. This clearly establishes the tool's scope and unique purpose.

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?

An explicit 'When not to use' section tells the agent to use cad_object for geometry creation first and cad_drawing for drawings. The action list also implies the intended workflow (create assembly → add parts/mates → solve). This is exemplary usage guidance.

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

cad_batchA
Destructive

Execute, schedule, inspect or manage batch jobs.

按 ``action`` 执行批处理操作:execute / schedule / status / cancel / list /
templates / run_script。
- ``execute``: run a list of tool calls synchronously (each ``command``
  has ``tool`` + ``arguments``); ``stop_on_error`` halts on the first
  failure.
- ``schedule`` / ``status`` / ``cancel`` / ``list``: create and manage
  one-off / cron / dependency-chained jobs (durable across restarts).
- ``templates``: list reusable Jinja2 command templates.
- ``run_script``: execute a sandboxed script (python / scr / batch).

When not to use: ``cad_batch`` sequences *other* tools. For a single
operation call the concrete aggregate directly (``cad_object``,
``cad_file``, ...). ``execute`` is synchronous — use ``schedule`` for
long-running work.
ParametersJSON Schema
NameRequiredDescriptionDefault
batchNoBatch action to perform, discriminated by `action`: execute (run commands synchronously), schedule, status, cancel, list, templates or run_script.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoWhether a script completed successfully
jobsNoJob summaries
nameNoJob name
stateNoJob state
actionYesBatch action
job_idNoJob id
statusYesOperation status
stderrNoCaptured stderr
stdoutNoCaptured stdout
messageNoStatus description
resultsNoPer-command results
exit_codeNoProcess exit code
templatesNoTemplate names
timed_outNoWhether execution hit the timeout
created_atNoCreation timestamp
duration_msNoExecution time in milliseconds
script_typeNoScript type that ran
failed_countNoFailed commands
command_countNoNumber of commands
success_countNoSuccessful commands
blocked_importsNoBlocked imports

TDQS

A4.9/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: execute is synchronous, scheduled jobs are 'durable across restarts', run_script is 'sandboxed', and stop_on_error halts on first failure. It also explains that schedule supports cron/dependency-chained jobs. This complements the destructiveHint annotation without contradicting it.

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 bullets, a clear action list, and a dedicated 'When not to use' section. Despite covering seven actions, it remains scannable and every sentence adds relevant information without fluff. The bilingual text is a minor stylistic note but does not hurt 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 the tool's complexity (seven actions, scheduling, templating, scripts), the description covers all key aspects: action semantics, synchronous vs scheduled execution, durability, sandboxing, and guidance for alternatives. With an output schema available, returning to documentation is unnecessary. The description is sufficiently complete for safe and correct invocation.

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 input schema has 100% coverage and a well-defined discriminated union, so the baseline is 3. The description adds value by clarifying the semantics of each action (e.g., execute runs tool+argument pairs, run_script is sandboxed, schedule supports cron/dependencies). It helps the agent understand how to choose the 'batch' union variant, which exceeds schema-only information.

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 with a specific verb set ('Execute, schedule, inspect or manage batch jobs') and then enumerates each action (execute, schedule, status, cancel, list, templates, run_script). It distinguishes itself from sibling CAD tools by explicitly noting that it sequences other tools, making the purpose unambiguous.

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 usage guidance including a 'When not to use' section: 'For a single operation call the concrete aggregate directly (cad_object, cad_file, ...)' and distinguishes synchronous execute from scheduled long-running work. This directly tells the agent when to prefer alternatives and when to use this tool.

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

cad_camA
Idempotent

Generate, simulate or export 2.5-axis toolpaths (contour + drilling).

聚合 CAM 工具。按 ``action`` 派发:
- ``toolpath``: 从当前文档的矩形/多边形(轮廓)与圆(钻孔)生成 2.5 轴刀轨,
  返回轮廓数、钻孔数、刀轨长度与包围盒。
- ``simulate``: 返回仿真报告(刀轨长度 + 估算加工时间)。
- ``export_gcode``: 生成并写出 G-code(G0/G1 + 钻孔循环,M2 结束)。

When not to use: 需要完整 3D 刀具路径或刀轴控制时超出本工具范围;本工具
聚焦 2.5 轴轮廓铣削 + 钻孔。
ParametersJSON Schema
NameRequiredDescriptionDefault
camYesCAM action, discriminated by `action`: toolpath, simulate or export_gcode.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNoWritten G-code path
actionYesAction executed
boundsNoToolpath bounds
statusYesOperation status
messageNoStatus description
line_countNoG-code line count
move_countNoTotal tool moves
drill_countNoNumber of drill operations
est_secondsNoEstimated machining time (s)
path_lengthNoCutting path length (mm)
contour_countNoNumber of contour operations

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, and the description adds value by describing what each action actually produces: counts, toolpath length, bounding box for toolpath; length plus estimated machining time for simulate; and concrete G-code details (G0/G1, drilling cycles, M2 termination) for export_gcode. It goes beyond annotations but does not disclose error conditions or file overwrite semantics for the export action.

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?

An efficient bilingual layout: front-loaded English headline, a systematic triplet of bullets, and a trailing exclusion clause. Every bullet earns its place with concrete output details. The moderate redundancy between the headline and the bullets is minor, and the bilingual duplication of intent actually broadens accessibility without bloat.

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?

This dispatched tool has three distinct parameter modes, and the description covers all three thoroughly. Its geometry basis for each action is explained, and the output schema exists to document return values. Remaining gaps are minor: it doesn't explicitly state that a document must be open with valid contour/circle entities, nor how export_gcode handles existing files. For a compound tool of this complexity, these are acceptable omissions.

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?

The input schema has full description coverage, with each parameter already carrying types, defaults, and unit-level descriptions (mm/min, RPM, retract height). The tool description adds no parameter-level semantics beyond what the schema provides; it only contextualizes the geometry inputs (rectangles/polygons/circles), which is behavioral rather than parameter-specific. The baseline 3 is therefore appropriate.

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 opening sentence names a specific verb+resource combination — generate, simulate, or export 2.5-axis toolpaths (contour + drilling) — so the agent knows exactly what kind of CAM operation this is. The three action bullets add further precision, and the 'When not to use' clause explicitly announces the tool is out of scope for full 3D toolpaths, distinguishing it from related siblings like cad_sim.

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 contains an explicit 'When not to use' section stating that full 3D toolpaths and tool-axis control are out of scope, which gives the agent a clear exclusion rule. The positive usage conditions are conveyed through the action list ('current document geometry'), but no sibling tool is named as the alternative for the 3D case, leaving the routing slightly less explicit than ideal.

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

cad_collabA

Session, branch, annotation, presence, history, resolve, permission or sync.

聚合协作操作。按 ``tool`` 派发到协作子域:session / branch / annotation /
presence / history / resolve / permission / sync。
- ``session``: create / list / join / leave / info a collaboration session
  over a document.
- ``branch``: fork / edit / merge / list document branches (CRDT).
- ``annotation``: add / list / close review annotations.
- ``presence``: set / get / list user presence.
- ``history``: applied operation history.
- ``resolve``: settle a branch-merge conflict (ours / theirs / latest).
- ``permission``: RBAC list / grant / check (viewer/editor/admin/owner).
- ``sync``: push operations + pull deltas/state — the WebSocket entry point.

When not to use: ``cad_collab`` coordinates *multi-user* work on a
document. For single-user edits use ``cad_object`` / ``cad_layer`` /
``cad_file`` directly; RBAC defaults to the session owner for unknown
users until an identity transport is configured.
ParametersJSON Schema
NameRequiredDescriptionDefault
collabYesCollab action to perform, discriminated by `tool`: session, branch, annotation, presence, history, resolve, permission or sync.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesCollab sub-domain executed
stateNoCRDT register state
deltasNoOperation deltas
eventsNoHistory events
statusYesOperation status
allowedNoRBAC check result
appliedNoApplied operations
membersNoMembers with roles
messageNoStatus description
pendingNoPending conflicts
branchesNoBranch summaries
presenceNoPresence list
sessionsNoSession summaries
resolutionNoConflict resolution
session_idNoSession identifier
annotationsNoAnnotations
conflict_idNoResolved conflict id

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description adds meaningful behavioral context: it is a dispatch tool keyed by `tool`, sync is the WebSocket entry point, RBAC defaults to session owner for unknown users, and branch operations use CRDT. These details help the agent anticipate side effects and authentication/reliability nuances.

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 summary line, a bullet list per subdomain, and a when-not-to-use section. It is slightly verbose due to repetition between the first line and the Chinese summary, but the organization makes the information easily scannable for a complex dispatcher tool.

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 (8 subdomains) and the existence of an output schema, the description is complete: it covers all subdomains, explains the dispatch mechanism, gives usage boundaries, and notes default identity behavior. No major selection or invocation criteria are missing.

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

Parameters4/5

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

The input schema already covers all parameters with descriptions, so the baseline is 3. The description adds value by mapping the `tool` discriminator to concrete subdomains and summarizing the actions each subdomain supports, which helps the agent choose the correct `collab` variant. It does not delve into parameter syntax because the schema already handles that.

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 cad_collab as a multi-user collaboration dispatcher with a specific resource scope (sessions, branches, annotations, presence, history, resolve, permissions, sync). It lists concrete sub-operations for each subdomain and explicitly distinguishes itself from single-user sibling tools, making its purpose highly specific.

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 an explicit 'When not to use' section that tells the agent to use cad_object/cad_layer/cad_file for single-user edits, and it explains the identity/RBAC default behavior. Within the dispatcher, each subdomain's action list acts as a clear guide for when to use which branch of the tool.

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

cad_constraintA

Add, remove, list or solve geometric constraints.

按 ``action`` 执行约束操作:add / remove / list / solve。
Adds 2D sketch constraints between entities (e.g. coincidence, distance,
angle). ``solve`` runs the constraint solver and reports residual error;
the optional ``planegcs`` backend is used when installed.

When not to use: ``cad_constraint`` constrains *geometry*; for assembly
mating (parts) use ``cad_assembly`` (action=add_mate/solve). For direct
transforms use ``cad_object`` (action=transform).
ParametersJSON Schema
NameRequiredDescriptionDefault
constraintNoConstraint action, discriminated by `action`: add, remove, list or solve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNoConstraint type
countNoNumber of constraints
actionYesConstraint action
statusYesOperation status
messageNoStatus description
entitiesNoReferenced entity ids
residualNoFinal residual norm
convergedNoWhether the solver converged
iterationsNoSolver iterations used
constraintsNoConstraint records
constraint_idNoConstraint id
moved_entitiesNoMoved entity ids

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, but the description adds useful behavioral context: 'solve runs the constraint solver and reports residual error' and mentions the optional 'planegcs' backend. This goes beyond the annotations by clarifying solve behavior and backend dependency. 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 compact and front-loaded: first sentence states the full purpose, the middle elaborates on solve behavior, and the final section gives exclusions. Every sentence earns its place; no 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 has a discriminated union with four actions, the description covers all of them, explains when not to use it, mentions the solve backend, and the output schema exists so return values need no explanation. It is 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?

Schema description coverage is 100%, so the schema already documents parameters well. The description adds extra semantic value by giving constraint type examples (coincidence, distance, angle) and explaining that solve reports residual error, which is not in the schema. This lifts it above the baseline of 3.

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 a specific verb+resource: 'Add, remove, list or solve geometric constraints.' It clearly enumerates all four actions and gives concrete constraint examples (coincidence, distance, angle), distinguishing it from sibling tools like cad_assembly and cad_object by explicitly scoping to geometry.

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 'When not to use' guidance, naming cad_assembly for assembly mating (action=add_mate/solve) and cad_object for direct transforms (action=transform). This directly answers when to use the tool versus alternatives.

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

cad_drawingA
Destructive

Create, edit or export an engineering drawing.

聚合工程图操作。按 ``action`` 派发:create / add_view / add_section /
add_dimension / add_tolerance / delete / export。
- ``create``: a sheet (paper A0-A4, title block).
- ``add_view`` / ``add_section``: main / projection / section / detail /
  isometric views over referenced entities.
- ``add_dimension``: ISO 129-1 dimensions (linear / angular / radial /
  diameter / ordinate).
- ``add_tolerance``: GD&T feature-control frames (position / flatness /
  parallelism / perpendicularity / concentricity).
- ``export``: write the sheet as svg / dxf / pdf at ``path``.

When not to use: ``cad_drawing`` produces engineering drawing sheets.
For plain 2D/3D preview images use ``cad_render``; for interop geometry
files use ``cad_file`` (export step/dxf/stl); for object geometry edits
use ``cad_object``.
ParametersJSON Schema
NameRequiredDescriptionDefault
drawingYesDrawing action to perform, discriminated by `action`: create, add_view, add_section, add_dimension, add_tolerance, delete or export.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNoExported path
paperNoPaper size
widthNoSheet width in mm
actionYesDrawing action executed
formatNoExport format
heightNoSheet height in mm
statusYesOperation status
messageNoStatus description
view_idNoView identifier
drawing_idNoDrawing identifier
dimension_idNoDimension identifier
tolerance_idNoTolerance identifier

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description consistently lists 'delete' as an action, adding context about confirm-driven deletion via schema but not restating it. The description adds behavioral details beyond annotations: the action dispatch mechanism, supported export formats (svg/dxf/pdf), view types, dimension standards, and GD&T symbols. 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 well-structured: a one-line summary, a brief Chinese coordinating phrase, bulleted action semantics, and an explicit not-to-use section. Every sentence contributes, and the bullet format makes the multi-action behavior scannable. It is appropriately sized for a tool with seven distinct operations.

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 (7 actions), the description covers every action with relevant detail, states output formats, and provides sibling-tool exclusions. The output schema exists, so return values need not be explained in the description. The only minor omission is not explicitly warning about the delete confirmation, but the schema's 'confirm' parameter covers that, and the destructive hint annotation already flags 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?

Schema description coverage is 100%, so the heavy lifting is done by the schema. However, the description adds semantic meaning beyond raw parameter names: ISO 129-1 for dimensions, GD&T feature-control frames, paper sizes A0-A4, and the mapping of actions to their purposes. This enriches the agent's understanding of how parameters combine, though it doesn't define every property in prose.

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 a specific verb+resource: 'Create, edit or export an engineering drawing.' It then enumerates all dispatched actions (create, add_view, add_section, add_dimension, add_tolerance, delete, export) with concrete definitions, and clearly distinguishes itself from sibling tools in the 'When not to use' section. This is far beyond a vague or tautological purpose.

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 explicitly provides a 'When not to use' section naming cad_render for preview images, cad_file for interop files, and cad_object for geometry edits. It also implicitly maps each action to its intended drawing scenario, such as ISO 129-1 dimensions and GD&T frames. This gives clear decision guidance for agent tool selection.

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

cad_featureA

Sweep, loft, fillet, chamfer or pattern geometry.

聚合特征操作。按 ``action`` 派发:sweep / loft / fillet / chamfer /
pattern_linear / pattern_circular / pattern_mirror。
- ``sweep`` / ``loft``: create new solids from a profile (sweep along a
  ``path``) or between ``profile_ids`` (loft). OCCT-backed when the
  ``occ`` extra is installed, with analytic fallbacks otherwise.
- ``fillet`` / ``chamfer``: round or bevel edges — exact on the OCCT
  kernel, otherwise report ``requires_occ``.
- ``pattern_linear`` / ``pattern_circular`` / ``pattern_mirror``: copy an
  entity into an array (rigid transforms, available on every kernel).

When not to use: ``cad_feature`` derives new geometry from existing
entities. For editing a single object's parameters use ``cad_object``
(update/transform); for boolean combination use ``cad_object``
(action=boolean).
ParametersJSON Schema
NameRequiredDescriptionDefault
featureYesFeature action to perform, discriminated by `action`: sweep, loft, fillet, chamfer, pattern_linear, pattern_circular or pattern_mirror.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of created instances
actionYesFeature action executed
statusYesOperation status
messageNoStatus description
object_idNoResult object id
object_idsNoResult object ids

TDQS

A4.6/5.0
Behavior4/5

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

Annotations provide no hints (readOnly, idempotent, destructive all false), so the description carries the transparency burden. It discloses OCCT backends with fallbacks, exactness on OCCT kernel, `requires_occ` reports, and rigid transform patterns. It does not specify side effects on source entities, but the 'creates new geometry' phrase implies non-destructive behavior, which is useful.

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: summary, Chinese translation, action-specific bullets, and a 'When not to use' section. It is front-loaded and avoids fluff, though the bilingual repetition is slightly redundant. Overall, every sentence 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 complexity with seven distinct actions, the description covers each action's behavior, kernel dependencies, fallbacks, and usage boundaries. The output schema also exists, so return-value details are not needed. The description is complete enough for correct tool selection and invocation.

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 coverage is 100%, so baseline is 3. The description adds value by mapping actions to the key parameters (`path`, `profile_ids`, `entity_id`, `radius`, etc.) and clarifying semantics like 'rigid transforms' and 'available on every kernel.' It does not duplicate schema text but provides high-level behavioral meaning per action.

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 a clear summary, 'Sweep, loft, fillet, chamfer or pattern geometry,' listing all supported actions. It further distinguishes from sibling tools via the 'When not to use' section, naming cad_object for parameter edits and boolean operations. This fully satisfies purpose clarity.

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 includes an explicit 'When not to use' section that names alternative tools and usage contexts, such as cad_object for update/transform and boolean. It also clarifies kernel-dependent behavior for each action group, giving the agent clear guidance on when each action is appropriate.

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

cad_fileA
Destructive

Create, open, save, close, delete, list, import or export files.

聚合文件操作。按 ``action`` 派发:create / open / save / close / delete /
list / import / export。
- ``create`` / ``open`` / ``save`` / ``close`` / ``delete`` / ``list``:
  manage in-memory documents. ``open`` and ``save`` read/write the JSON
  scene format; ``create`` starts a new document (optional ``template`` /
  ``unit``).
- ``export``: write the current document to an interop format — step
  (recommended), dxf, stl, dwg or json — at ``path``.
- ``import``: load an interop file (.json / .dxf / .step / .dwg) as a new
  document.

When not to use: ``cad_file`` handles whole files/documents. For
per-object geometry edits use ``cad_object``; to import/export raw JSON
scene data (not files) use ``cad_json`` (import_scene/export_scene).
ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile action to perform, discriminated by `action`: create, open, save, close, delete, list, import or export.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNoSaved / exported path
filesNoOpen files
actionYesFile action executed
statusYesOperation status
file_idNoFile unique identifier
messageNoStatus description
filenameNoFile name
object_countNoNumber of imported objects

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already set destructiveHint=true, and the description aligns by listing 'delete' and 'save' actions. It adds context beyond annotations: open/save use JSON scene format, create accepts template/unit, export/import handle interop formats. No contradiction found.

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?

Description is well-structured and front-loaded: starts with a one-line summary, then action details, then exclusions. Every sentence adds value; no redundancy 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?

The description covers all 8 actions, dispatch model, file formats, and sibling differentiation. Since an output schema exists, return-value details are not required. The description is complete for a complex multi-action 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?

Schema covers 100% of parameters, so baseline is 3. The description adds meaningful semantics by summarizing action behavior (e.g., export writes to interop formats, import loads .json/.dxf/.step/.dwg), which complements the schema. It mentions .dwg import not explicitly in the schema's import path description.

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 scope: 'Create, open, save, close, delete, list, import or export files.' It uses a specific verb list and explicitly differentiates from siblings by saying 'For per-object geometry edits use cad_object; to import/export raw JSON scene data (not files) use cad_json'.

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 includes a 'When not to use' section that names concrete alternative tools (cad_object, cad_json), and gives format guidance (e.g., 'step (recommended)'). This is explicit guidance on when to use and when to avoid.

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

cad_gltfA
Idempotent

Export, import or preview glTF 2.0 geometry.

聚合 glTF 工具。按 ``action`` 派发:
- ``export``: 将当前文档的实体(实体几何)导出为自包含 glTF 2.0 文件,
  颜色属性映射为 PBR ``baseColorFactor``。
- ``import``: 读取 glTF 文件并把每个 mesh 作为 ``mesh`` 实体导入当前文档。
- ``preview``: 返回当前文档 glTF 表示的概要(mesh 数 / 包围盒)。

When not to use: 需要 STEP/DXF/STL 等工程格式互操作时用 ``cad_file``
(import/export);本工具专注 glTF 网格资产。
ParametersJSON Schema
NameRequiredDescriptionDefault
gltfYesglTF action, discriminated by `action`: export, import or preview.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNoFile path written / read
actionYesAction executed
statusYesOperation status
messageNoStatus description
mesh_countNoNumber of meshes exported / imported
object_idsNoImported object ids

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already provide idempotentHint=true and destructiveHint=false, but the description adds non-obvious behavior beyond those: export maps color attributes to PBR baseColorFactor, import creates mesh entities, and preview returns a lightweight mesh-count/bbox summary. That is useful context an agent would otherwise not know.

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 compact and front-loaded: a one-sentence summary, then three bullets for the dispatch branches, then a routing note. There is a little redundancy between the initial English sentence and the bullets, but it is minor and the structure is easy to parse.

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 tool with three discriminated action variants, an existing output schema, and annotated safety properties, the description is complete. It covers each action's semantics, highlights color and entity mapping implications, and specifies the alternative to use for non-glTF engineering formats.

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 100%, so the baseline is 3. The description adds real semantic value by explaining that the union object is dispatched by 'action' and by describing what each action does with the relevant state (current document, target or source file, mesh entities). It does not repeat field names verbatim, rather gives operational context 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 opening sentence states a clear verb and resource: 'Export, import or preview glTF 2.0 geometry.' The bullet list expands each action with enough detail to distinguish export, import, and preview, and the 'When not to use' note names the sibling tool (cad_file) it is not. A model can route correctly without opening the schema.

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 explicitly states the tool's intended scope (dedicated to glTF mesh assets) and contains a 'When not to use' section directing agents to cad_file for engineering formats like STEP/DXF/STL. It also specifies that the tool dispatches by action, so the appropriate usage for each branch is fairly clear.

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

cad_jsonA
Read-onlyIdempotent

Read / parse / validate / import / export JSON.

按 ``action`` 执行 JSON 读写、解析、校验、导入与导出:
- load:读取文件原文
- parse:解析并报告结构
- validate:按 scene/geometry 模式校验
- import_geometry:将 JSON 几何导入当前文档
- export_geometry:将对象导出为 JSON
- import_scene:以 JSON 场景创建新文档
- export_scene:导出当前文档为 JSON 场景
- save:将 JSON 字符串写入文件

When not to use: ``cad_json`` operates on JSON text and scene data in
memory. To read/write the JSON scene as a whole file use ``cad_file``
(open/save); for interop formats (STEP/DXF/STL/DWG) use ``cad_file``
(import/export); for creating/editing individual geometry objects use
``cad_object``.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYesJSON action, discriminated by `action`: load, parse, validate, import_geometry, export_geometry, import_scene, export_scene or save.

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYesAction executed
errorsNoValidation errors
statusYesOperation status
contentNoRaw / serialized JSON content
messageNoStatus description
is_validNoValidity (parse/validate actions)
object_countNoNumber of objects handled
imported_objectsNoImported object summaries

TDQS

A3.7/5.0
Behavior1/5

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

The description contradicts the annotations: readOnlyHint=true conflicts with actions such as save (writes to file) and import_geometry/import_scene (modify or create documents). The description itself reveals these mutating behaviors, yet the annotations claim read-only. This is a severe inconsistency.

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 structured with a clear summary, a bulleted action list, and an exclusion paragraph. It is somewhat lengthy due to bilingual duplication, but every section earns its place and important information is front-loaded.

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 all 8 actions, explains the in-memory scope, and provides usage exclusions, which is strong for a multi-action tool. The presence of an output schema reduces the need to explain return values. One point is lost due to the annotation contradiction that undermines overall clarity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents every parameter. The description adds a high-level list of actions and bilingual explanations, but does not go beyond the schema to clarify parameter syntax or edge cases. Baseline 3 is appropriate.

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 specific verbs and resources: 'Read / parse / validate / import / export JSON' and enumerates 8 distinct actions. It distinguishes from siblings by explicitly framing cad_json as operating on JSON text and in-memory scene data, unlike cad_file or cad_object.

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 includes an explicit 'When not to use' section that names cad_file for file-level open/save and import/export, and cad_object for geometry editing. This gives clear guidance on when to choose this tool vs alternatives.

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

cad_layerA
Destructive

Create, read, update, delete or list layers.

聚合图层操作。按 ``action`` 派发:create / read / update / delete / list。
Layers group objects for display and selection. ``create`` accepts
color / linetype / linewidth; ``update`` can also toggle ``visible`` /
``locked``; ``delete`` removes the layer *and* the objects on it.

When not to use: for per-object layer membership use ``cad_object``
(create/update with a ``layer``); for per-layer object counts use
``cad_status`` (target=layer). To hide objects without deleting them
prefer ``cad_layer`` (update visible=false).
ParametersJSON Schema
NameRequiredDescriptionDefault
layerYesLayer action to perform, discriminated by `action`: create, read, update, delete or list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoLayer name
colorNoLayer color
actionYesLayer action executed
layersNoLayer definitions
lockedNoLock state
statusYesOperation status
messageNoStatus description
visibleNoVisibility
linetypeNoLine type
linewidthNoLine width

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, so the description adds value by specifying that 'delete removes the layer *and* the objects on it'—a critical side effect. It also explains the layer concept (grouping objects for display/selection) and that update can toggle visibility/locked, going beyond the generic destructive 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 front-loaded with the purpose and well-structured, ending with explicit alternatives. The Chinese sentence duplicates the English dispatch explanation, adding minor redundancy, but the overall length is appropriate and every sentence contributes useful context.

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

Completeness4/5

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

With a rich union schema and an output schema present, the description covers the CRUD operations, critical destructive behavior, and alternatives. It lacks details on error conditions or return formats, but those are not required given the output schema and the tool's straightforward nature.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description summarizes what each action accepts (e.g., create accepts color/linetype/linewidth; update can toggle visible/locked), but these details are already present in the schema's property descriptions. It does not add new format or syntax information 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 opens with 'Create, read, update, delete or list layers,' a specific verb+resource combination. It further distinguishes from siblings by explicitly naming cad_object and cad_status as alternatives for different use cases, making the tool's scope 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?

The 'When not to use' section gives explicit alternatives: per-object layer membership via cad_object, per-layer object counts via cad_status, and hiding objects via cad_layer (update visible=false). This provides clear decision guidance for when to use this tool versus siblings.

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

cad_measureA
Read-onlyIdempotent

Measure a distance or an object's area/volume.

聚合测量操作。按 ``action`` 派发:distance / area。
- ``distance``: Euclidean distance between ``point_a`` and ``point_b``
  (2D ``[x, y]`` or 3D ``[x, y, z]``), returns ``distance``.
- ``area``: measure an existing object by ``object_id`` — 2D kinds
  (circle / rectangle / polygon) return area (``mm^2``), 3D kinds
  (box / cylinder / sphere / cone) return volume (``mm^3``); ``kind``
  in the output reports which.

When not to use: ``cad_measure`` reads existing geometry. To query
object position / bounding box use ``cad_object`` (action=read) or
``cad_status`` (target=object); to validate mesh validity use
``cad_validate`` (action=geometry).
ParametersJSON Schema
NameRequiredDescriptionDefault
measureYesMeasurement to perform, discriminated by `action`: distance or area.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoMeasurement kind: area / volume
unitNomm^2 for area, mm^3 for volume
valueNoMeasured value
actionYesMeasurement action executed
statusYesOperation status
messageNoStatus description
distanceNoDistance between the two points

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds valuable context beyond this: it notes the tool 'reads existing geometry', details that area action returns area for 2D kinds and volume for 3D kinds, and explains output includes a 'kind' field. This enhances understanding of the tool's behavior 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 well-structured and front-loaded with a clear summary. Each section (action details, output semantics, alternatives) earns its place without unnecessary verbosity. The use of bullet points and 'When not to use' enhances readability and scannability.

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 moderate complexity, the description covers all essential aspects: the two actions, parameter requirements, output behavior, and exclusions. Since an output schema exists, return values are documented elsewhere. The description is complete 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.

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds meaning by explaining how the 'action' parameter discriminates between the two measurement modes, the point format for distance, and the object_id usage for area/volume. It also clarifies the output units (mm^2, mm^3), which is not fully explicit in 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 measures distance or an object's area/volume, with specific actions (distance/area) and differentiates from sibling tools like cad_object and cad_validate by specifying what it does not do. The verb 'measure' and resource (geometry) are explicit.

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 usage guidance, including a 'When not to use' section that names alternatives (cad_object, cad_status, cad_validate) for other queries. It also explains the action-based dispatch for distance vs area/volume, giving clear context for when each mode is appropriate.

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

cad_nlpA

Parse a natural language request into a tool call or continue a chat.

聚合 NLP 操作。按 ``action`` 派发:command / chat。
- ``command``: map free-form English/Chinese text to a CAD tool call
  (returns ``tool`` + ``arguments``; does NOT execute it). Ambiguous
  requests return candidate ``suggestions``.
- ``chat``: multi-turn dialogue with anaphora resolution — a create
  intent executes immediately and its object is remembered so "move it"
  / "把它" resolve to that object.

When not to use: ``cad_nlp`` is a convenience dispatcher. For
deterministic, schema-driven control prefer calling the concrete
aggregate tools directly (``cad_object``, ``cad_file``, ...). ``command``
only parses — you must dispatch the returned call yourself.
ParametersJSON Schema
NameRequiredDescriptionDefault
nlpYesNLP operation to perform, discriminated by `action`: command or chat.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolNoResolved tool name
actionYesNLP action executed
intentNoParsed intent / rule name
messageNoStatus description
responseNoChat response text
argumentsNoResolved arguments
confidenceNoMatch confidence
suggestionsNoCandidate intents

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide no safety hints (all false), so the description carries the full burden. It discloses critical behaviors: command does NOT execute the tool call, ambiguous requests return suggestions, and chat creates objects immediately and remembers them for anaphora resolution. This goes well beyond the annotations and fully informs the agent of side effects and return semantics.

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 bullets and front-loaded with the main purpose. However, the Chinese sentence '聚合 NLP 操作。按 ``action`` 派发:command / chat。' essentially repeats the opening English sentence, adding mild redundancy. Otherwise, every sentence 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 complexity (two modes, anaphora, parsing vs execution), the description covers all key aspects: when to use, what each mode does, return behavior, and exclusions. With an output schema present, no return format details are needed. The description is complete 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?

Although schema coverage is 100%, the description adds essential semantics: it explains the action discriminator's meaning, what command returns (tool + arguments, no execution), and how chat handles anaphora. This is practical, actionable information that the schema's property descriptions do not provide, significantly enhancing correct invocation.

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 a specific verb+resource: 'Parse a natural language request into a tool call or continue a chat.' It further distinguishes between command and chat modes, and positions the tool as a convenience dispatcher relative to concrete sibling tools like cad_object and cad_file. This makes its purpose unambiguous.

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 when-not-to-use guidance: 'For deterministic, schema-driven control prefer calling the concrete aggregate tools directly (cad_object, cad_file, ...).' It also clarifies that command only parses and requires the agent to dispatch the returned call, giving clear direction on when to use this tool versus alternatives.

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

cad_objectA
Destructive

Create, read, update, delete, copy, transform, list or boolean objects.

聚合对象操作。按 ``action`` 派发:create / read / update / delete / copy /
transform / list / boolean。
- ``create``: add an entity by ``type`` (line, circle, arc, rectangle,
  polygon, polyline, box, cylinder, sphere, cone) with ``params``;
  returns the new ``object_id`` and bounding box.
- ``read`` / ``update`` / ``delete`` / ``copy``: inspect, edit (geometry /
  layer / properties), remove, or duplicate an object by ``object_id``.
- ``transform``: apply a 4x4 matrix (column-major, translation in the
  fourth column) for translate / rotate / scale.
- ``list``: enumerate objects, optionally filtered by ``layer``.
- ``boolean``: combine objects (union / subtract / intersect) into a new
  mesh; requires the optional ``boolean`` extra.

When not to use: ``cad_object`` edits the current document's geometry.
For interop file formats use ``cad_file`` (import/export); for JSON
scene round-trips use ``cad_json``; for measurements on existing objects
use ``cad_measure``; for geometric validation use ``cad_validate``.
ParametersJSON Schema
NameRequiredDescriptionDefault
objectYesObject action to perform, discriminated by `action`: create, read, update, delete, copy, transform, list or boolean.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bboxNoBounding box
typeNoObject type
layerNoLayer name
actionYesObject action executed
statusYesOperation status
messageNoStatus description
objectsNoObject summaries
geometryNoGeometry parameters
object_idNoObject unique identifier
result_idNoResult object id (boolean / copy)
propertiesNoObject properties

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, and the description adds that cad_object 'edits the current document's geometry,' making the mutation scope explicit. It also discloses that the boolean action 'requires the optional boolean extra,' which is essential operational context beyond the schema. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is structured with a lead summary, bullet-like action breakdown, and a dedicated 'When not to use' section. Despite being longer than average, every sentence serves a purpose and the layout is scannable for an agent needing to dispatch by action. No fluff or repetition beyond the minor bilingual restatement.

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 tool has 8 distinct action variants and an aggregate schema, yet the description covers each action's purpose, key parameters, and return behavior for create. It also addresses optional prerequisites (boolean extra) and sibling tool boundaries, making it fully adequate for selection and invocation even with the output schema present.

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?

Though schema description coverage is 100%, the description adds critical semantic detail: it lists the allowed create types (line, circle, arc, etc.), specifies that transform uses a '4x4 matrix (column-major, translation in the fourth column)', and notes that create returns 'the new object_id and bounding box'. These enrich the bare schema parameter 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 opens with 'Create, read, update, delete, copy, transform, list or boolean objects,' a specific verb+resource statement that also enumerates the distinct actions. Each action is further elaborated with its target (e.g., 'add an entity by type', 'apply a 4x4 matrix'), and the tool is explicitly differentiated from siblings like cad_file, cad_json, cad_measure, and cad_validate.

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?

A 'When not to use' section explicitly names alternative tools (cad_file for import/export, cad_json for JSON round-trips, cad_measure for measurements, cad_validate for validation) and clarifies that cad_object edits the current document's geometry. This gives the agent both positive and negative usage signals.

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

cad_pluginA

Install, uninstall, list, enable, disable or inspect plugins.

聚合插件工具。按 ``action`` 派发:install / uninstall / list / enable /
disable / manifest。
- ``install``: 触发 entry-point 发现,只从已安装发行版加载插件(不接收
  任意模块路径)。
- ``uninstall`` / ``enable`` / ``disable``: 按名字管理插件生命周期。
- ``list``: 触发 entry-point 发现并列出已安装插件。
- ``manifest``: 返回指定插件的静态声明(名称/版本/权限/依赖)。

Security: 插件与服务器运行在同一进程 / 信任域,未做进程级沙箱。
``install`` 只加载已安装发行版的 entry-point 插件(等价于 ``pip
install`` 的信任边界),不接受 ``module:attr`` 导入。仅从可信来源安装
插件;进程级沙箱是后续硬化项。

When not to use: 插件提供的实际建模能力应通过其注册的 MCP 工具直接调用;
``cad_plugin`` 只管理插件生命周期。
ParametersJSON Schema
NameRequiredDescriptionDefault
pluginYesPlugin action, discriminated by `action`: install, uninstall, list, enable, disable or manifest.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoPlugin name
actionYesPlugin action executed
statusYesOperation status
messageNoStatus description
pluginsNoInstalled plugin summaries
manifestNoPlugin manifest

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses critical security behavior: plugins run in the same process/trust domain without process-level sandboxing, install only loads entry-point plugins from installed distributions and rejects arbitrary module:attr imports. This meaningfully exceeds annotation context and helps agents judge risks; minor details like persistence of enable/disable state are not covered, but the key trust-boundary behavior is transparent.

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

Conciseness4/5

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

The action list is front-loaded, and the structure flows logically: overview, dispatch details, security, then when-not-to-use. It is a bit longer than strictly necessary due to bilingual repetition, but each section serves a distinct guidance purpose and is not bloated.

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 dispatcher tool with six actions, the description covers every action's semantics, the dangerous install edge case, the unresolved security hardening item, and usage boundaries. Since output schemas exist for each action variant, no return-format explanation is necessary; everything an agent needs to call it correctly is present.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds useful conceptual framing about install semantics and the trust boundary of module paths, but it doesn't provide additional format-level detail beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb and resource: install, uninstall, list, enable, disable or inspect plugins. The opening sentence names every supported action, and the final line explicitly scopes the tool to plugin lifecycle management, distinguishing it from sibling tools that expose plugin capabilities.

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 provides a 'When not to use' note stating that actual plugin capabilities should be invoked via their registered MCP tools, not through cad_plugin. This gives the agent clear selection guidance and alternative routing, well beyond simple implied usage.

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

cad_renderA
Read-onlyIdempotent

Render the document in a selected mode.

按 ``mode`` 渲染当前文档:
- ortho:2D 正交投影 PNG(top/front/side)
- view_3d:按存储的三维视图定义渲染 PNG
- section:平面剖切 PNG(plane=XY/YZ/XZ)
- explode:爆炸视图 PNG
- animation:orbit/turntable GIF 动画
- webgl:WebGL 增量同步 delta

When not to use: ``cad_render`` produces images / sync deltas only. To
store or edit a named view *definition* before rendering use
``cad_view``; for drawing-sheet exports (SVG/DXF/PDF) use
``cad_drawing`` (action=export); for interop geometry files use
``cad_file`` (export).
ParametersJSON Schema
NameRequiredDescriptionDefault
renderYesRender request, discriminated by `mode`: ortho, view_3d, section, explode, animation or webgl.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYesRender mode used
pathNoPath of the written output file
statusYesOperation status
messageNoStatus description
payloadNoExtra mode-specific data (webgl deltas)
data_uriNoOutput data URI (base64)
size_bytesNoOutput size in bytes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive hints. The description adds valuable context that it 'produces images / sync deltas only' and details output formats per mode, reinforcing the non-mutating behavior. It does not contradict annotations and provides useful output-format context.

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 a one-line summary, followed by a concise mode list and a well-structured 'When not to use' section. The bilingual list adds a bit of redundancy but remains compact and every line carries informational 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?

For a complex tool with six discriminated modes, the description covers all relevant scenarios: what it does, which modes exist, what output each produces, and clearly explains when to use sibling tools instead. The output schema is present, so return-value details are already handled, making the description adequate for safe tool selection.

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 coverage is 100% and each parameter has its own description. The description adds a mode-to-output-format mapping (e.g., ortho -> PNG, animation -> GIF, webgl -> delta) that the schema does not capture, helping the agent understand the semantic difference between modes beyond their 'const' values.

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 renders the document in a selected mode and enumerates six modes with their output types (PNG, GIF, sync delta). It distinguishes itself from sibling tools by explicitly naming cad_view, cad_drawing, and cad_file as alternatives for other operations.

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?

Provides explicit 'When not to use' guidance with direct references to cad_view (storing/editing view definitions), cad_drawing (SVG/DXF/PDF exports), and cad_file (interop geometry files). This clearly directs the agent to the right tool for adjacent tasks.

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

cad_simA
Destructive

Mesh, setup, run, inspect or delete a simulation.

聚合仿真操作。按 ``action`` 派发:mesh / setup / run / result / list / delete。
- ``mesh``: generate a hexa8 hex mesh of an entity's bounding box (pure
  Python, always available).
- ``setup``: register a simulation (``kind`` = fea or kinematics).
- ``run``: execute synchronously, or schedule an async batch job with
  ``async_run``. FEA (CalculiX) and kinematics (PyBullet) backends are
  optional — absent engines report ``requires_sim``.
- ``result`` / ``list`` / ``delete``: inspect or remove simulations.

When not to use: ``cad_sim`` analyzes physical behavior. For geometric
*validity* checks use ``cad_validate`` (geometry/interference); for
meshing previews that are pure geometry use ``cad_object`` (read).
ParametersJSON Schema
NameRequiredDescriptionDefault
simYesSimulation action to perform, discriminated by `action`: mesh, setup, run, result, list or delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bboxNoMeshed bounding box
kindNoSimulation kind
nameNoSimulation name
stateNoSimulation state
actionYesSimulation action executed
resultNoSimulation result payload
sim_idNoSimulation identifier
statusYesOperation status
messageNoStatus description
resultsNoSimulation summaries
node_countNoMesh node count
element_typeNoElement type
element_countNoMesh element count

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate destructive behavior (destructiveHint=true) and non-read-only. The description adds valuable context: mesh is 'pure Python, always available', FEA/kinematics backends are optional and absent engines report 'requires_sim', and run can schedule an async batch job. This goes beyond 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.

Conciseness5/5

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

The description is tightly packed with useful information: action list, backend constraints, and alternatives. It uses structure (bullets and bold) to aid scanning without redundancy. Every sentence contributes to selection or invocation.

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 (multiple action variants, optional backends, async scheduling) and the presence of an output schema, the description covers all operational aspects: setup, run, mesh, result, list, delete, and when not to use it. No critical gaps identified.

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 coverage is 100% with per-action descriptions for all fields. The description adds semantics by explaining the discriminated union (`action` dispatch) and clarifying backend requirements and always-available mesh. This enriches parameter understanding 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?

Description opens with a specific verb+resource: 'Mesh, setup, run, inspect or delete a simulation.' It enumerates all actions and explicitly distinguishes from siblings by directing alternative use cases to cad_validate and cad_object. This is clear and well-differentiated.

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?

Provides explicit when-to-use guidance with a dedicated 'When not to use' section naming cad_validate (geometry/interference) and cad_object (pure geometry meshing previews). Also explains backend optionality (CalculiX/PyBullet) and async vs sync execution, which helps choose appropriate actions.

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

cad_statusA
DestructiveIdempotent

Query session, file, object, layer, health or logs status.

按 ``target`` 查询当前会话的各类状态(check/file/object/layer/health/
logs_get/logs_clear)。
- ``check``: overall session summary (open files, current document).
- ``file`` / ``object`` / ``layer``: live detail for one entity.
- ``health``: server version, uptime and registered tool count.
- ``logs_get`` / ``logs_clear``: read (with limit/level/source/job_id
  filters) or clear the in-memory log buffer.

When not to use: ``cad_status`` reports live session/server state. For
geometric *validation* (manifold checks, interference) or aggregate
document statistics use ``cad_validate`` (geometry/metrics); for
measuring distances/areas use ``cad_measure``.
ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoStatus query, discriminated by `target`: check, file, object, layer, health, logs_get or logs_clear.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesOperation status
targetYesStatus target queried
messageNoStatus description
summaryNoStatus data

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=true, so the safety profile is known. The description adds context by explaining what each target returns (e.g., health includes server version/uptime/tool count) and explicitly notes that logs_clear clears the in-memory buffer, aligning with the destructive hint. It does not contradict annotations, though it does not elaborate on side effects beyond logs_clear or error behavior, so it is not a 5.

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 bullet points and a dedicated 'When not to use' paragraph, and the first sentence clearly summarizes the tool. The Chinese sentence repeats some of the English enumeration, adding slight redundancy, but overall the length is appropriate for the tool's complexity.

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 tool is complex with seven target types, and the description covers all of them, explains their use cases, and provides alternatives. Since an output schema exists, the description does not need to detail return values. Minor gaps include not mentioning the default target (check) or error handling, but the schema covers defaults, so the description is sufficiently complete.

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?

The input schema has 100% description coverage, with each property and target variant described in detail. The description restates the targets and their purpose but does not add new parameter-level semantics beyond what the schema already provides. Per the calibration guidelines, a baseline of 3 is appropriate when the schema carries the load.

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 a specific verb+resource: 'Query session, file, object, layer, health or logs status' and then enumerates each target with distinct semantics (check, file, object, layer, health, logs_get, logs_clear). It also differentiates from sibling tools by explicitly naming cad_validate and cad_measure as alternatives for other concerns, making the tool's purpose very clear.

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?

Provides explicit 'When not to use' guidance that names alternatives (cad_validate for validation/aggregate stats, cad_measure for measurements) and clarifies that cad_status is for live session/server state. It also explains when to use each target variant, giving the agent clear decision criteria.

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

cad_validateA
Read-onlyIdempotent

Validate geometry, detect interference, inspect topology or fetch metrics.

聚合校验操作。按 ``action`` 派发:geometry / interference / topology / metrics。
- ``geometry``: check objects for self-intersections, degenerate faces and
  non-manifold edges (optional ``object_ids`` filter); returns issues with
  ``type`` / ``location`` / ``fix_suggestion``.
- ``interference``: detect box-box overlaps between objects, with overlap
  volume per pair.
- ``topology``: per-object vertex/edge/face counts and manifold status.
- ``metrics``: aggregate document stats (files, objects, layers, bbox,
  kinds) for the current session.

When not to use: ``cad_validate`` analyzes correctness and aggregates.
For simple geometric measurements (distance / area) use ``cad_measure``;
for live server/file/object status use ``cad_status``; for JSON scene
validation against the schema use ``cad_json`` (action=validate).
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesValidation action to perform, discriminated by `action`: geometry, interference, topology or metrics.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bboxNoDocument bounding box
filesNoOpen files
kindsNoObject count by kind
pairsNoInterfering pairs
validNoWhether all checked objects are valid
actionYesValidation action executed
issuesNoDetected issues
layersNoTotal layers
statusYesOperation status
checkedNoNumber of objects checked
messageNoStatus description
objectsNoTotal objects
warningsNoTopology warnings
summariesNoPer-object topology
object_countNoNumber of objects
total_volumeNoSum of all overlap volumes
interference_countNoNumber of interfering pairs

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive behavior. The description adds per-action output semantics (e.g., issues with type/location/fix_suggestion, overlap volume, manifold status, aggregate metrics) which goes beyond annotations. Minor gap: doesn't mention error conditions or performance characteristics, but overall transparent.

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 one-line summary, detailed bullets per action, and a dedicated 'When not to use' section. Every part adds value; no redundant or filler content. The bilingual note is brief and harmless.

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 as a four-action dispatcher, the description covers each action's purpose, key inputs, and output highlights. Combined with rich schema descriptions, an output schema, and clear annotations, the description is complete for selecting and invoking the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents the 'query' discriminator and 'object_ids' filter thoroughly. The description reinforces the action choices and mentions the optional object_ids filter, but doesn't add meaningful new parameter-level detail beyond what the schema provides. Baseline 3 applies.

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 validates geometry, detects interference, inspects topology, or fetches metrics. It explicitly enumerates the four actions and distinguishes itself from siblings in the 'When not to use' section, naming cad_measure, cad_status, and cad_json as alternatives for other use cases.

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?

Provides explicit guidance on when to use this tool versus alternatives. The 'When not to use' section names specific sibling tools for simple measurements, live status, and JSON validation, making the decision boundary very clear.

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

cad_variableA

Set or list parametric variables in the current document.

按 ``action`` 设置(set)或列出(list)当前文档的参数变量。Set with
``value`` and/or ``expr`` (expressions may reference other variables,
e.g. ``width * 2``); ``{name}`` tokens in CLI draw arguments interpolate
the resolved value.

When not to use: variables are document-scoped bookkeeping — do NOT use
them to store free-form strings (only numeric values), and use
``cad_object_update`` for geometry changes rather than variables.
ParametersJSON Schema
NameRequiredDescriptionDefault
variableNoVariable action, discriminated by `action`: set (define/update with value, unit or expr) or list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoVariable name
unitNoUnit suffix
countNoNumber of variables
valueNoEvaluated value
actionYesVariable action
statusYesOperation status: success / error
messageNoStatus description
variablesNoVariable records

TDQS

A4.6/5.0
Behavior4/5

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

The description adds meaningful context beyond the annotations, such as document-scoped scope, numeric-only values, expression referencing, and {name} interpolation. The annotations (readOnly=false, idempotent=false, destructive=false) are not contradicted, though the description could have noted that the 'list' action is read-only.

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 the main purpose upfront, a usage example, and a 'When not to use' section. The inclusion of Chinese text adds redundancy for an English-consuming agent, but each section contains useful information and the description remains appropriately sized.

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 (a discriminated union with set/list modes), the description covers all key aspects: setting with value/expr, list mode, interpolation, and explicit exclusions. The presence of an output schema means return values are already documented, so the description is complete for selecting and invoking the 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 input schema already provides 100% coverage with detailed descriptions for all fields. The tool description adds extra semantic value by explaining how value and expr can be combined, giving an example expression, and describing CLI interpolation with {name} tokens, which goes 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 'Set or list parametric variables in the current document', providing a specific verb and resource. It distinguishes this tool from siblings by focusing on document-scoped variable bookkeeping, which no other sibling tool covers.

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 gives explicit when-to-use and when-not-to-use guidance: it warns against storing free-form strings and explicitly names cad_object_update as the alternative for geometry changes. It also explains how to use value/expr and the {name} interpolation, giving concrete usage context.

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

cad_versionA

Save, list, diff or restore document version snapshots.

按 ``action`` 执行版本快照操作:save / list / diff / restore。
In-memory snapshots of the current document state. ``save`` captures a
labeled snapshot; ``diff`` compares two snapshots with ``deepdiff`` and
reports changed/added/removed fields; ``restore`` rolls the document back
to a snapshot.

When not to use: ``cad_version`` is for in-memory undo-like versioning.
For durable file persistence use ``cad_file`` (save/export); for
collaboration branches use ``cad_collab`` (tool=branch).
ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion action, discriminated by `action`: save, list, diff or restore a document snapshot.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rawNoRaw deepdiff result
countNoNumber of snapshots
labelNoSnapshot label
actionYesVersion action
statusYesOperation status
changesNoTotal number of differences
file_idNoFile id
messageNoStatus description
versionsNoSnapshots
identicalNoWhether two snapshots are identical
version_idNoVersion id
added_countNoAdded items
removed_countNoRemoved items
changed_fieldsNoChanged field paths

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate this is a mutating, non-idempotent, non-destructive operation. The description adds valuable context: snapshots are in-memory (not durable), diff uses deepdiff and reports changed/added/removed fields, and restore rolls back the document. This goes beyond the annotation flags, though it does not discuss all side effects or permission requirements.

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: a one-line summary, a paragraph explaining each action, and a dedicated 'When not to use' section. However, it repeats the same content in Chinese ('按 action 执行版本快照操作'), which is redundant for an English-language tool description. Still, the structure is clear and information-dense.

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 all four actions, the in-memory nature, and the key differentiators from sibling tools. It also explains the diff output format (changed/added/removed fields). An output schema is present, so return values are likely documented elsewhere. Minor gap: it does not explicitly state the default action (list) or required parameters, but the schema covers those. Overall, this is complete for a multi-action tool.

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

Parameters3/5

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

Schema coverage is 100% with each parameter having a description in the $defs (e.g., label, author, file_id, version_a/b). The description only provides high-level action semantics ('labeled snapshot', 'diff compares two snapshots') without adding new parameter-level meaning. Baseline 3 is appropriate since schema does the heavy lifting.

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 a specific verb and resource: 'Save, list, diff or restore document version snapshots.' This clearly distinguishes the tool's four actions and the resource (document version snapshots). It also names sibling tools (cad_file, cad_collab) in the 'When not to use' section, further differentiating purposes.

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 gives explicit guidance on when not to use this tool, naming alternatives: 'For durable file persistence use cad_file (save/export); for collaboration branches use cad_collab (tool=branch).' This is a clear usage distinction and helps the agent choose correctly.

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

cad_viewA
Destructive

Create, read, list, update or delete a 3D view definition.

聚合 3D 视图操作。按 ``action`` 派发:create / read / list / update / delete。
Manages named ``View3DDefinition`` records (camera pose, projection,
section plane, explode offsets). Each view has a unique ``name`` per
document and an optional explicit ``view_id``.

When not to use: ``cad_view`` manages view *definitions* only — it does
not produce images. To render a stored view (or ortho / section / explode /
animation / webgl output) use ``cad_render`` (mode=view_3d etc.).
ParametersJSON Schema
NameRequiredDescriptionDefault
viewYesView action to perform, discriminated by `action`: create, read, list, update or delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
viewNoThe view definition
countNoNumber of views
viewsNoView definitions
actionYesView action executed
statusYesOperation status
messageNoStatus description

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already signal destructive behavior (destructiveHint=true), and the description adds context about the scope (definitions only), uniqueness constraints (unique name per document), and an optional explicit view_id. However, it does not detail side effects like irreversibility of deletion or field-clearing behavior, though such details appear in the schema.

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

Conciseness5/5

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

The description is concise, front-loaded with the primary CRUD purpose, followed by domain details and an explicit when-not-to-use guidance. The bilingual repeat is acceptable and doesn't add bloat.

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 rich schema and annotations, the description adequately covers the tool's scope and constraints, including its distinction from rendering. It doesn't need to explain return values due to the output schema.

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?

The schema has 100% parameter description coverage, so the schema already documents each field. The description adds minimal parameter-specific meaning beyond mentioning the action discriminator and the uniqueness of name, which are also covered in the schema. Baseline is appropriate.

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 function with specific verbs ('Create, read, list, update or delete') and identifies the resource ('3D view definition'). It also distinguishes from sibling cad_render by explicitly stating what not to use it for.

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 explicitly includes a 'When not to use' section, directing users to cad_render for rendering and clarifying that cad_view only manages definitions. This provides clear guidance on when to use this tool versus an alternative.

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.13.0
    • Addedcad_cam
    • Addedcad_gltf
    • Addedcad_plugin
  2. 85 tool updatesv0.12.0
    • Addedcad_assembly
    • Removedcad_assembly_add_mate
    • Removedcad_assembly_add_part
    • Removedcad_assembly_add_subasm
    • Removedcad_assembly_bom
    • Removedcad_assembly_create
    • Removedcad_assembly_explode
    • Removedcad_assembly_remove_part
    • Removedcad_assembly_solve
    • Changedcad_batch1 field changed
      • changedInput schema / $defs / BatchCommand / properties / tool / description
        Previous value: -"Tool name, e.g. cad_object_create"New value: +"Tool name, e.g. cad_object"
    • Addedcad_collab
    • Removedcad_collab_annotation
    • Removedcad_collab_branch
    • Removedcad_collab_history
    • Removedcad_collab_permission
    • Removedcad_collab_presence
    • Removedcad_collab_resolve
    • Removedcad_collab_session
    • Removedcad_collab_sync
    • Addedcad_drawing
    • Removedcad_drawing_add_dimension
    • Removedcad_drawing_add_section
    • Removedcad_drawing_add_tolerance
    • Removedcad_drawing_add_view
    • Removedcad_drawing_create
    • Removedcad_drawing_delete
    • Removedcad_drawing_export
    • Addedcad_feature
    • Removedcad_feature_chamfer
    • Removedcad_feature_fillet
    • Removedcad_feature_loft
    • Removedcad_feature_pattern_circular
    • Removedcad_feature_pattern_linear
    • Removedcad_feature_pattern_mirror
    • Removedcad_feature_sweep
    • Addedcad_file
    • Removedcad_file_close
    • Removedcad_file_create
    • Removedcad_file_delete
    • Removedcad_file_io
    • Removedcad_file_list
    • Removedcad_file_open
    • Removedcad_file_save
    • Addedcad_layer
    • Removedcad_layer_create
    • Removedcad_layer_delete
    • Removedcad_layer_list
    • Removedcad_layer_read
    • Removedcad_layer_update
    • Removedcad_logs
    • Addedcad_measure
    • Removedcad_measure_area
    • Removedcad_measure_distance
    • Removedcad_metrics_get
    • Addedcad_nlp
    • Removedcad_nlp_chat
    • Removedcad_nlp_command
    • Addedcad_object
    • Removedcad_object_boolean
    • Removedcad_object_copy
    • Removedcad_object_create
    • Removedcad_object_delete
    • Removedcad_object_list
    • Removedcad_object_read
    • Removedcad_object_transform
    • Removedcad_object_update
    • Changedcad_render6 fields changed
      • addedInput schema / $defs / RenderAnimationParams / properties / mode / description
        Added value: +"Render an orbit animation"
      • addedInput schema / $defs / RenderExplodeParams / properties / mode / description
        Added value: +"Render an exploded view"
      • addedInput schema / $defs / RenderOrthoParams / properties / mode / description
        Added value: +"Render an orthographic 2D view"
      • addedInput schema / $defs / RenderSectionParams / properties / mode / description
        Added value: +"Render a plane section"
      • addedInput schema / $defs / RenderView3DParams / properties / mode / description
        Added value: +"Render a stored 3D view"
      • addedInput schema / $defs / RenderWebglParams / properties / mode / description
        Added value: +"Emit a WebGL sync delta"
    • Addedcad_sim
    • Removedcad_sim_delete
    • Removedcad_sim_list
    • Removedcad_sim_mesh
    • Removedcad_sim_result
    • Removedcad_sim_run
    • Removedcad_sim_setup
    • Changedcad_status9 fields changed
      • addedInput schema / $defs / StatusCheckParams / properties / target / description
        Added value: +"Query the overall session status"
      • addedInput schema / $defs / StatusFileParams / properties / target / description
        Added value: +"Query file status"
      • addedInput schema / $defs / StatusHealthParams / properties / target / description
        Added value: +"Query server health"
      • addedInput schema / $defs / StatusLayerParams / properties / target / description
        Added value: +"Query layer status"
      • addedInput schema / $defs / StatusLogsClearParams
        Added value: +{
        +  "description": "Clear the in-memory log buffer.",
        +  "properties": {
        +    "target": {
        +      "const": "logs_clear",
        +      "default": "logs_clear",
        +      "description": "Clear in-memory log entries",
        +      "title": "Target",
        +      "type": "string"
        +    }
        +  },
        +  "title": "StatusLogsClearParams",
        +  "type": "object"
        +}
      • addedInput schema / $defs / StatusLogsGetParams
        Added value: +{
        +  "description": "Retrieve recent log entries.",
        +  "properties": {
        +    "job_id": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Job id filter",
        +      "title": "Job Id"
        +    },
        +    "level": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Minimum level filter",
        +      "title": "Level"
        +    },
        +    "limit": {
        +      "default": 50,
        +      "description": "Maximum entries",
        +      "maximum": 200,
        +      "minimum": 1,
        +      "title": "Limit",
        +      "type": "integer"
        +    },
        +    "source": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Source filter",
        +      "title": "Source"
        +    },
        +    "target": {
        +      "const": "logs_get",
        +      "default": "logs_get",
        +      "description": "Read in-memory log entries",
        +      "title": "Target",
        +      "type": "string"
        +    }
        +  },
        +  "title": "StatusLogsGetParams",
        +  "type": "object"
        +}
      • addedInput schema / $defs / StatusObjectParams / properties / target / description
        Added value: +"Query object status"
      • changedInput schema / properties / status / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/StatusCheckParams"
        -  },
        -  {
        -    "$ref": "#/$defs/StatusFileParams"
        -  },
        -  {
        -    "$ref": "#/$defs/StatusObjectParams"
        -  },
        -  {
        -    "$ref": "#/$defs/StatusLayerParams"
        -  },
        -  {
        -    "$ref": "#/$defs/StatusHealthParams"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/StatusCheckParams"
        +  },
        +  {
        +    "$ref": "#/$defs/StatusFileParams"
        +  },
        +  {
        +    "$ref": "#/$defs/StatusObjectParams"
        +  },
        +  {
        +    "$ref": "#/$defs/StatusLayerParams"
        +  },
        +  {
        +    "$ref": "#/$defs/StatusHealthParams"
        +  },
        +  {
        +    "$ref": "#/$defs/StatusLogsGetParams"
        +  },
        +  {
        +    "$ref": "#/$defs/StatusLogsClearParams"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Status query, discriminated by `target`: check, file, object, layer or health."New value: +"Status query, discriminated by `target`: check, file, object, layer, health, logs_get or logs_clear."
    • Addedcad_validate
    • Removedcad_validate_geometry
    • Removedcad_validate_interference
    • Removedcad_validate_topology
    • Addedcad_view
    • Removedcad_view_3d_create
    • Removedcad_view_3d_delete
    • Removedcad_view_3d_list
    • Removedcad_view_3d_read
    • Removedcad_view_3d_update
  3. 70 tool updatesv0.11.1
    • Changedcad_assembly_add_mate6 fields changed
      • addedInput schema / properties / angle / description
        Added value: +"Angle in degrees (for angle mates)"
      • addedInput schema / properties / axis / description
        Added value: +"Axis direction [x, y, z]"
      • addedInput schema / properties / distance / description
        Added value: +"Distance value (for distance/angle mates)"
      • addedInput schema / properties / mate_type / description
        Added value: +"Mate type: coincident, concentric, parallel, perpendicular, distance, angle"
      • addedInput schema / properties / node_a / description
        Added value: +"Anchor node id"
      • addedInput schema / properties / node_b / description
        Added value: +"Target node id"
    • Changedcad_assembly_add_part6 fields changed
      • addedInput schema / properties / entity_id / description
        Added value: +"Referenced document entity id"
      • addedInput schema / properties / euler / description
        Added value: +"Local Euler angles [yaw, pitch, roll]"
      • addedInput schema / properties / name / description
        Added value: +"Part name"
      • addedInput schema / properties / parent_id / description
        Added value: +"Parent node id (sub-assembly)"
      • addedInput schema / properties / properties / description
        Added value: +"Part properties"
      • addedInput schema / properties / translation / description
        Added value: +"Local translation [x, y, z]"
    • Changedcad_assembly_add_subasm2 fields changed
      • addedInput schema / properties / name / description
        Added value: +"Sub-assembly name"
      • addedInput schema / properties / parent_id / description
        Added value: +"Parent node id"
    • Changedcad_assembly_bom1 field changed
      • addedInput schema / properties / format / description
        Added value: +"Output format: json or csv"
    • Changedcad_assembly_create1 field changed
      • addedInput schema / properties / name / description
        Added value: +"Assembly name"
    • Changedcad_assembly_explode2 fields changed
      • addedInput schema / properties / direction / description
        Added value: +"Explode direction: x, y or z"
      • addedInput schema / properties / spacing / description
        Added value: +"Offset per level of nesting"
    • Changedcad_assembly_remove_part1 field changed
      • addedInput schema / properties / node_id / description
        Added value: +"Assembly node id to remove (and its subtree)"
    • Changedcad_batch1 field changed
      • addedInput schema / properties / batch / description
        Added value: +"Batch action to perform, discriminated by `action`: execute (run commands synchronously), schedule, status, cancel, list, templates or run_script."
    • Changedcad_collab_annotation7 fields changed
      • addedInput schema / properties / action / description
        Added value: +"add | list | close"
      • addedInput schema / properties / annotation_id / description
        Added value: +"Annotation id (close)"
      • addedInput schema / properties / by_user / description
        Added value: +"Acting user"
      • addedInput schema / properties / ref / description
        Added value: +"Optional referenced key/id (add)"
      • addedInput schema / properties / scope / description
        Added value: +"Annotation scope (add)"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
      • addedInput schema / properties / text / description
        Added value: +"Annotation text (add)"
    • Changedcad_collab_branch8 fields changed
      • addedInput schema / properties / action / description
        Added value: +"fork | edit | merge | list"
      • addedInput schema / properties / branch_id / description
        Added value: +"Branch id (edit/merge)"
      • addedInput schema / properties / by_user / description
        Added value: +"Acting user"
      • addedInput schema / properties / delete / description
        Added value: +"Delete instead of write (edit)"
      • addedInput schema / properties / key / description
        Added value: +"Register key (edit)"
      • addedInput schema / properties / name / description
        Added value: +"Branch name (fork)"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
      • addedInput schema / properties / value / description
        Added value: +"Register value (edit)"
    • Changedcad_collab_history4 fields changed
      • addedInput schema / properties / after_seq / description
        Added value: +"Only return operations after this seq"
      • addedInput schema / properties / by_user / description
        Added value: +"User requesting history (RBAC check)"
      • addedInput schema / properties / limit / description
        Added value: +"Max operations to return"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
    • Changedcad_collab_permission7 fields changed
      • addedInput schema / properties / action / description
        Added value: +"list | grant | check"
      • addedInput schema / properties / by_user / description
        Added value: +"Acting user"
      • addedInput schema / properties / permission / description
        Added value: +"Action for check: read|write|manage|delete"
      • addedInput schema / properties / role / description
        Added value: +"Role to grant: viewer|editor|admin|owner"
      • addedInput schema / properties / scope / description
        Added value: +"Resource scope for check"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
      • addedInput schema / properties / user_id / description
        Added value: +"Target user (grant/check)"
    • Changedcad_collab_presence5 fields changed
      • addedInput schema / properties / action / description
        Added value: +"set | get | list"
      • addedInput schema / properties / cursor / description
        Added value: +"Cursor position, e.g. entity id"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
      • addedInput schema / properties / status / description
        Added value: +"Presence status (online/busy/away)"
      • addedInput schema / properties / user_id / description
        Added value: +"Target user"
    • Changedcad_collab_resolve4 fields changed
      • addedInput schema / properties / by_user / description
        Added value: +"Acting user"
      • addedInput schema / properties / conflict_id / description
        Added value: +"Conflict id to resolve"
      • addedInput schema / properties / resolution / description
        Added value: +"ours | theirs | latest"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
    • Changedcad_collab_session5 fields changed
      • addedInput schema / properties / action / description
        Added value: +"create | list | join | leave | info"
      • addedInput schema / properties / document_id / description
        Added value: +"Document to collaborate on (create)"
      • addedInput schema / properties / name / description
        Added value: +"Session name (create)"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id (join/info/leave)"
      • addedInput schema / properties / user_id / description
        Added value: +"Acting user (identity)"
    • Changedcad_collab_sync5 fields changed
      • addedInput schema / properties / by_user / description
        Added value: +"Acting user"
      • addedInput schema / properties / include_state / description
        Added value: +"Include the full live state"
      • addedInput schema / properties / ops / description
        Added value: +"Operations to apply"
      • addedInput schema / properties / session_id / description
        Added value: +"Session id"
      • addedInput schema / properties / since / description
        Added value: +"Only return operations after this seq"
    • Changedcad_constraint1 field changed
      • addedInput schema / properties / constraint / description
        Added value: +"Constraint action, discriminated by `action`: add, remove, list or solve."
    • Changedcad_drawing_add_dimension5 fields changed
      • addedInput schema / properties / dim_type / description
        Added value: +"linear, angular, radial, diameter or ordinate (ISO 129-1)"
      • addedInput schema / properties / points / description
        Added value: +"Anchor points [[x, y], ...]"
      • addedInput schema / properties / position / description
        Added value: +"Text position [x, y]"
      • addedInput schema / properties / reference / description
        Added value: +"Referenced entity or view id"
      • addedInput schema / properties / value / description
        Added value: +"Dimension value"
    • Changedcad_drawing_add_section5 fields changed
      • addedInput schema / properties / entity_ids / description
        Added value: +"Referenced entity ids"
      • addedInput schema / properties / name / description
        Added value: +"Section view name"
      • addedInput schema / properties / offset / description
        Added value: +"Plane offset along the normal"
      • addedInput schema / properties / plane / description
        Added value: +"Section plane: XY, YZ or XZ"
      • addedInput schema / properties / translation / description
        Added value: +"Sheet offset [x, y]"
    • Changedcad_drawing_add_tolerance4 fields changed
      • addedInput schema / properties / datum / description
        Added value: +"Datum reference, e.g. 'A'"
      • addedInput schema / properties / reference / description
        Added value: +"Referenced entity or view id"
      • addedInput schema / properties / symbol / description
        Added value: +"position, flatness, parallelism, perpendicularity or concentricity"
      • addedInput schema / properties / value / description
        Added value: +"Tolerance value"
    • Changedcad_drawing_add_view6 fields changed
      • addedInput schema / properties / direction / description
        Added value: +"Orthographic direction: top/front/side"
      • addedInput schema / properties / entity_ids / description
        Added value: +"Referenced document entity ids"
      • addedInput schema / properties / name / description
        Added value: +"View name"
      • addedInput schema / properties / scale / description
        Added value: +"View scale factor"
      • addedInput schema / properties / translation / description
        Added value: +"Sheet offset [x, y]"
      • addedInput schema / properties / view_type / description
        Added value: +"main, projection, section, detail or isometric"
    • Changedcad_drawing_create4 fields changed
      • addedInput schema / properties / drawn_by / description
        Added value: +"Title block author"
      • addedInput schema / properties / name / description
        Added value: +"Drawing name"
      • addedInput schema / properties / paper / description
        Added value: +"Paper size: A0, A1, A2, A3, A4"
      • addedInput schema / properties / title / description
        Added value: +"Title block title"
    • Changedcad_drawing_delete1 field changed
      • addedInput schema / properties / confirm / description
        Added value: +"Set to true to confirm deletion"
    • Changedcad_drawing_export2 fields changed
      • addedInput schema / properties / format / description
        Added value: +"Export format: svg, dxf or pdf"
      • addedInput schema / properties / path / description
        Added value: +"Target file path"
    • Changedcad_feature_chamfer5 fields changed
      • addedInput schema / properties / entity_id / description
        Added value: +"Source entity id"
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / object_id / description
        Added value: +"Optional id for the result entity"
      • addedInput schema / properties / properties / description
        Added value: +"Entity properties"
      • addedInput schema / properties / size / description
        Added value: +"Chamfer size"
    • Changedcad_feature_fillet5 fields changed
      • addedInput schema / properties / entity_id / description
        Added value: +"Source entity id"
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / object_id / description
        Added value: +"Optional id for the result entity"
      • addedInput schema / properties / properties / description
        Added value: +"Entity properties"
      • addedInput schema / properties / radius / description
        Added value: +"Fillet radius"
    • Changedcad_feature_loft5 fields changed
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / object_id / description
        Added value: +"Optional id for the result entity"
      • addedInput schema / properties / profile_ids / description
        Added value: +"Profile entity ids, bottom to top"
      • addedInput schema / properties / properties / description
        Added value: +"Entity properties"
      • addedInput schema / properties / sections / description
        Added value: +"Per-profile [x, y, z] placement (defaults to Z stacking)"
    • Changedcad_feature_pattern_circular7 fields changed
      • addedInput schema / properties / angle / description
        Added value: +"Angular span in degrees"
      • addedInput schema / properties / axis / description
        Added value: +"Rotation axis [x, y, z]"
      • addedInput schema / properties / center / description
        Added value: +"Rotation centre [x, y, z]"
      • addedInput schema / properties / count / description
        Added value: +"Number of instances (incl. original)"
      • addedInput schema / properties / entity_id / description
        Added value: +"Source entity id"
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / properties / description
        Added value: +"Copy properties"
    • Changedcad_feature_pattern_linear6 fields changed
      • addedInput schema / properties / count / description
        Added value: +"Total number of instances (incl. original)"
      • addedInput schema / properties / direction / description
        Added value: +"Pattern direction [x, y, z]"
      • addedInput schema / properties / entity_id / description
        Added value: +"Source entity id"
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / properties / description
        Added value: +"Copy properties"
      • addedInput schema / properties / spacing / description
        Added value: +"Spacing between instances"
    • Changedcad_feature_pattern_mirror5 fields changed
      • addedInput schema / properties / entity_id / description
        Added value: +"Source entity id"
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / plane_normal / description
        Added value: +"Mirror plane normal [x, y, z]"
      • addedInput schema / properties / plane_point / description
        Added value: +"A point on the mirror plane [x, y, z]"
      • addedInput schema / properties / properties / description
        Added value: +"Copy properties"
    • Changedcad_feature_sweep5 fields changed
      • addedInput schema / properties / layer / description
        Added value: +"Target layer"
      • addedInput schema / properties / object_id / description
        Added value: +"Optional id for the result entity"
      • addedInput schema / properties / path / description
        Added value: +"Sweep path polyline points [[x,y,z], ...]"
      • addedInput schema / properties / profile_id / description
        Added value: +"Id of the profile entity (circle/rectangle)"
      • addedInput schema / properties / properties / description
        Added value: +"Entity properties"
    • Changedcad_file_close1 field changed
      • addedInput schema / properties / file_id / description
        Added value: +"File id to close (defaults to current)"
    • Changedcad_file_create3 fields changed
      • addedInput schema / properties / filename / description
        Added value: +"File name with extension"
      • addedInput schema / properties / template / description
        Added value: +"Template file path"
      • addedInput schema / properties / unit / description
        Added value: +"Unit: mm, cm, m, in, ft"
    • Changedcad_file_delete1 field changed
      • addedInput schema / properties / file_id / description
        Added value: +"File id to delete"
    • Changedcad_file_io1 field changed
      • addedInput schema / properties / file / description
        Added value: +"File IO action, discriminated by `action`: export the current document (step/dxf/stl/dwg/json) or import a file as a new document."
    • Changedcad_file_open1 field changed
      • addedInput schema / properties / path / description
        Added value: +"File path to open"
    • Changedcad_file_save2 fields changed
      • addedInput schema / properties / file_id / description
        Added value: +"File id to save (defaults to current)"
      • addedInput schema / properties / path / description
        Added value: +"Target path (defaults to current)"
    • Changedcad_json1 field changed
      • addedInput schema / properties / params / description
        Added value: +"JSON action, discriminated by `action`: load, parse, validate, import_geometry, export_geometry, import_scene, export_scene or save."
    • Changedcad_layer_create4 fields changed
      • addedInput schema / properties / color / description
        Added value: +"Layer color as #RRGGBB"
      • addedInput schema / properties / linetype / description
        Added value: +"Line type"
      • addedInput schema / properties / linewidth / description
        Added value: +"Line width"
      • addedInput schema / properties / name / description
        Added value: +"Layer name"
    • Changedcad_layer_delete1 field changed
      • addedInput schema / properties / name / description
        Added value: +"Layer name"
    • Changedcad_layer_read1 field changed
      • addedInput schema / properties / name / description
        Added value: +"Layer name"
    • Changedcad_layer_update6 fields changed
      • addedInput schema / properties / color / description
        Added value: +"New color as #RRGGBB"
      • addedInput schema / properties / linetype / description
        Added value: +"New line type"
      • addedInput schema / properties / linewidth / description
        Added value: +"New line width"
      • addedInput schema / properties / locked / description
        Added value: +"Lock state"
      • addedInput schema / properties / name / description
        Added value: +"Layer name"
      • addedInput schema / properties / visible / description
        Added value: +"Visibility"
    • Changedcad_logs1 field changed
      • addedInput schema / properties / logs / description
        Added value: +"Log action, discriminated by `action`: get (read entries with limit/level/source/job_id filters) or clear."
    • Changedcad_measure_area1 field changed
      • addedInput schema / properties / object_id / description
        Added value: +"Object id to measure"
    • Changedcad_measure_distance2 fields changed
      • addedInput schema / properties / point_a / description
        Added value: +"First point [x, y, (z)]"
      • addedInput schema / properties / point_b / description
        Added value: +"Second point [x, y, (z)]"
    • Changedcad_nlp_chat3 fields changed
      • addedInput schema / properties / session_id / description
        Added value: +"Conversation session id"
      • addedInput schema / properties / text / description
        Added value: +"Free-form user message"
      • addedInput schema / properties / tool_whitelist / description
        Added value: +"Restrict matched intents to these tool names"
    • Changedcad_nlp_command2 fields changed
      • addedInput schema / properties / text / description
        Added value: +"Free-form natural language request"
      • addedInput schema / properties / tool_whitelist / description
        Added value: +"Restrict matches to these tool names"
    • Changedcad_object_boolean6 fields changed
      • addedInput schema / properties / layer / description
        Added value: +"Layer for the result object"
      • addedInput schema / properties / new_id / description
        Added value: +"Optional id for the result object"
      • addedInput schema / properties / operation / description
        Added value: +"Boolean operation to perform"
      • addedInput schema / properties / operation / examples
        Added value: +[
        +  "subtract"
        +]
      • addedInput schema / properties / target_id / description
        Added value: +"Target object id"
      • addedInput schema / properties / tool_ids / description
        Added value: +"Tool object ids to combine"
    • Changedcad_object_copy2 fields changed
      • addedInput schema / properties / new_id / description
        Added value: +"Id for the copy (auto-generated if empty)"
      • addedInput schema / properties / object_id / description
        Added value: +"Object unique identifier"
    • Changedcad_object_create4 fields changed
      • addedInput schema / properties / layer / description
        Added value: +"Target layer name"
      • addedInput schema / properties / params / description
        Added value: +"Geometry parameters, varies by type"
      • addedInput schema / properties / properties / description
        Added value: +"Object properties: color, linetype, linewidth"
      • addedInput schema / properties / type / description
        Added value: +"Object type: line, circle, arc, rectangle, polygon, polyline, box, cylinder, sphere, cone"
    • Changedcad_object_delete1 field changed
      • addedInput schema / properties / object_id / description
        Added value: +"Object unique identifier"
    • Changedcad_object_list1 field changed
      • addedInput schema / properties / layer / description
        Added value: +"Filter by layer"
    • Changedcad_object_read1 field changed
      • addedInput schema / properties / object_id / description
        Added value: +"Object unique identifier"
    • Changedcad_object_transform2 fields changed
      • addedInput schema / properties / matrix / description
        Added value: +"4x4 transformation matrix"
      • addedInput schema / properties / object_id / description
        Added value: +"Object unique identifier"
    • Changedcad_object_update4 fields changed
      • addedInput schema / properties / layer / description
        Added value: +"New layer"
      • addedInput schema / properties / object_id / description
        Added value: +"Object unique identifier"
      • addedInput schema / properties / params / description
        Added value: +"New geometry parameters"
      • addedInput schema / properties / properties / description
        Added value: +"New properties to merge"
    • Changedcad_render1 field changed
      • addedInput schema / properties / render / description
        Added value: +"Render request, discriminated by `mode`: ortho, view_3d, section, explode, animation or webgl."
    • Changedcad_sim_delete1 field changed
      • addedInput schema / properties / sim_id / description
        Added value: +"Simulation id to delete"
    • Changedcad_sim_mesh4 fields changed
      • addedInput schema / properties / entity_id / description
        Added value: +"Entity id to mesh"
      • addedInput schema / properties / nx / description
        Added value: +"Divisions along X"
      • addedInput schema / properties / ny / description
        Added value: +"Divisions along Y"
      • addedInput schema / properties / nz / description
        Added value: +"Divisions along Z"
    • Changedcad_sim_result1 field changed
      • addedInput schema / properties / sim_id / description
        Added value: +"Simulation id"
    • Changedcad_sim_run2 fields changed
      • addedInput schema / properties / async_run / description
        Added value: +"Schedule as an async batch job"
      • addedInput schema / properties / sim_id / description
        Added value: +"Simulation id"
    • Changedcad_sim_setup4 fields changed
      • addedInput schema / properties / entity_id / description
        Added value: +"Target entity id"
      • addedInput schema / properties / kind / description
        Added value: +"Simulation kind: fea or kinematics"
      • addedInput schema / properties / name / description
        Added value: +"Simulation name"
      • addedInput schema / properties / params / description
        Added value: +"Backend parameters"
    • Changedcad_status1 field changed
      • addedInput schema / properties / status / description
        Added value: +"Status query, discriminated by `target`: check, file, object, layer or health."
    • Changedcad_validate_geometry1 field changed
      • addedInput schema / properties / object_ids / description
        Added value: +"Object ids to validate (all when omitted)"
    • Changedcad_validate_interference1 field changed
      • addedInput schema / properties / object_ids / description
        Added value: +"Object ids to check (all when omitted)"
    • Changedcad_variable1 field changed
      • addedInput schema / properties / variable / description
        Added value: +"Variable action, discriminated by `action`: set (define/update with value, unit or expr) or list."
    • Changedcad_version1 field changed
      • addedInput schema / properties / version / description
        Added value: +"Version action, discriminated by `action`: save, list, diff or restore a document snapshot."
    • Changedcad_view_3d_create7 fields changed
      • addedInput schema / properties / camera / description
        Added value: +"Optional camera pose"
      • addedInput schema / properties / explode / description
        Added value: +"Optional explode offsets"
      • addedInput schema / properties / fit_to_bounds / description
        Added value: +"Auto-frame the model bounds"
      • addedInput schema / properties / name / description
        Added value: +"View name (unique per document)"
      • addedInput schema / properties / projection / description
        Added value: +"perspective / orthographic"
      • addedInput schema / properties / section / description
        Added value: +"Optional section plane"
      • addedInput schema / properties / view_id / description
        Added value: +"Optional explicit view id"
    • Changedcad_view_3d_delete1 field changed
      • addedInput schema / properties / view_id / description
        Added value: +"View id to delete"
    • Changedcad_view_3d_read1 field changed
      • addedInput schema / properties / view_id / description
        Added value: +"View id or name to read"
    • Changedcad_view_3d_update6 fields changed
      • addedInput schema / properties / camera / description
        Added value: +"New camera pose"
      • addedInput schema / properties / explode / description
        Added value: +"New explode offsets (null clears)"
      • addedInput schema / properties / name / description
        Added value: +"New name (optional)"
      • addedInput schema / properties / projection / description
        Added value: +"perspective / orthographic"
      • addedInput schema / properties / section / description
        Added value: +"New section plane (null clears)"
      • addedInput schema / properties / view_id / description
        Added value: +"View id to update"
  4. 60 tool updatesv0.11.0
    • Addedcad_assembly_remove_part
    • Addedcad_batch
    • Removedcad_batch_cancel
    • Removedcad_batch_execute
    • Removedcad_batch_list
    • Removedcad_batch_run_script
    • Removedcad_batch_schedule
    • Removedcad_batch_status
    • Removedcad_batch_templates
    • Removedcad_boolean_intersect
    • Removedcad_boolean_subtract
    • Removedcad_boolean_union
    • Addedcad_constraint
    • Removedcad_constraint_add
    • Removedcad_constraint_list
    • Removedcad_constraint_remove
    • Removedcad_constraint_solve
    • Addedcad_drawing_delete
    • Addedcad_file_delete
    • Removedcad_file_export
    • Removedcad_file_import
    • Addedcad_file_io
    • Addedcad_json
    • Removedcad_json_export_geometry
    • Removedcad_json_export_scene
    • Removedcad_json_import_geometry
    • Removedcad_json_import_scene
    • Removedcad_json_load
    • Removedcad_json_parse
    • Removedcad_json_save
    • Removedcad_json_validate
    • Addedcad_logs
    • Removedcad_logs_clear
    • Removedcad_logs_get
    • Addedcad_measure_area
    • Addedcad_measure_distance
    • Addedcad_object_copy
    • Addedcad_object_transform
    • Addedcad_render
    • Removedcad_render_view
    • Addedcad_sim_delete
    • Addedcad_status
    • Removedcad_status_check
    • Removedcad_status_file
    • Removedcad_status_health
    • Removedcad_status_layer
    • Removedcad_status_object
    • Addedcad_variable
    • Removedcad_variable_list
    • Removedcad_variable_set
    • Addedcad_version
    • Removedcad_version_diff
    • Removedcad_version_list
    • Removedcad_version_restore
    • Removedcad_version_save
    • Removedcad_view_3d_render
    • Removedcad_view_animation
    • Removedcad_view_explode
    • Removedcad_view_section
    • Removedcad_webgl_sync
  5. 103 tool updatesv0.10.6
    • First observedcad_assembly_add_mate
    • First observedcad_assembly_add_part
    • First observedcad_assembly_add_subasm
    • First observedcad_assembly_bom
    • First observedcad_assembly_create
    • First observedcad_assembly_explode
    • First observedcad_assembly_solve
    • First observedcad_batch_cancel
    • First observedcad_batch_execute
    • First observedcad_batch_list
    • First observedcad_batch_run_script
    • First observedcad_batch_schedule
    • First observedcad_batch_status
    • First observedcad_batch_templates
    • First observedcad_boolean_intersect
    • First observedcad_boolean_subtract
    • First observedcad_boolean_union
    • First observedcad_collab_annotation
    • First observedcad_collab_branch
    • First observedcad_collab_history
    • First observedcad_collab_permission
    • First observedcad_collab_presence
    • First observedcad_collab_resolve
    • First observedcad_collab_session
    • First observedcad_collab_sync
    • First observedcad_constraint_add
    • First observedcad_constraint_list
    • First observedcad_constraint_remove
    • First observedcad_constraint_solve
    • First observedcad_drawing_add_dimension
    • First observedcad_drawing_add_section
    • First observedcad_drawing_add_tolerance
    • First observedcad_drawing_add_view
    • First observedcad_drawing_create
    • First observedcad_drawing_export
    • First observedcad_feature_chamfer
    • First observedcad_feature_fillet
    • First observedcad_feature_loft
    • First observedcad_feature_pattern_circular
    • First observedcad_feature_pattern_linear
    • First observedcad_feature_pattern_mirror
    • First observedcad_feature_sweep
    • First observedcad_file_close
    • First observedcad_file_create
    • First observedcad_file_export
    • First observedcad_file_import
    • First observedcad_file_list
    • First observedcad_file_open
    • First observedcad_file_save
    • First observedcad_json_export_geometry
    • First observedcad_json_export_scene
    • First observedcad_json_import_geometry
    • First observedcad_json_import_scene
    • First observedcad_json_load
    • First observedcad_json_parse
    • First observedcad_json_save
    • First observedcad_json_validate
    • First observedcad_layer_create
    • First observedcad_layer_delete
    • First observedcad_layer_list
    • First observedcad_layer_read
    • First observedcad_layer_update
    • First observedcad_logs_clear
    • First observedcad_logs_get
    • First observedcad_metrics_get
    • First observedcad_nlp_chat
    • First observedcad_nlp_command
    • First observedcad_object_boolean
    • First observedcad_object_create
    • First observedcad_object_delete
    • First observedcad_object_list
    • First observedcad_object_read
    • First observedcad_object_update
    • First observedcad_render_view
    • First observedcad_sim_list
    • First observedcad_sim_mesh
    • First observedcad_sim_result
    • First observedcad_sim_run
    • First observedcad_sim_setup
    • First observedcad_status_check
    • First observedcad_status_file
    • First observedcad_status_health
    • First observedcad_status_layer
    • First observedcad_status_object
    • First observedcad_validate_geometry
    • First observedcad_validate_interference
    • First observedcad_validate_topology
    • First observedcad_variable_list
    • First observedcad_variable_set
    • First observedcad_version_diff
    • First observedcad_version_list
    • First observedcad_version_restore
    • First observedcad_version_save
    • First observedcad_view_3d_create
    • First observedcad_view_3d_delete
    • First observedcad_view_3d_list
    • First observedcad_view_3d_read
    • First observedcad_view_3d_render
    • First observedcad_view_3d_update
    • First observedcad_view_animation
    • First observedcad_view_explode
    • First observedcad_view_section
    • First observedcad_webgl_sync

TDQS

A4.3/5.0
Disambiguation4/5

Each tool targets a distinct CAD subdomain (file, object, layer, JSON, view, drawing, simulation, etc.), and the descriptions include explicit 'When not to use' guidance that clears most confusion. Minor overlap exists between cad_json and cad_file for JSON scene round-trips, and cad_status vs. cad_validate both surface aggregate info, but the file-vs-in-memory and live-state-vs-geometry-check distinctions keep them separable.

Naming Consistency5/5

All 19 tools follow an identical cad_<noun> pattern in lowercase snake_case, with no camelCase or verb-style variations. The pattern is fully predictable across the set. Although actions are dispatched via an 'action' argument rather than encoded in the tool name, the convention is uniform and easy to learn.

Tool Count4/5

19 tools is on the high side but well suited to a comprehensive CAD suite that spans geometry, layers, files, constraints, assemblies, drawings, simulation, and collaboration. Each tool behaves as a macro for a dedicated subdomain, so the count is slightly heavy yet reasonable for the stated scope. It does not approach the 25+ excessive threshold.

Completeness5/5

The tool set covers the full CAD lifecycle: create/read/update/delete for objects, layers, views, and files; plus validation, rendering, versioning, constraints, assemblies, drawings, features, simulation, and collaboration. Imports/exports are available for JSON, STEP, DXF, STL, DWG, SVG, PDF, and GIF, leaving no obvious dead ends. Minor gaps like an explicit undo are handled by cad_version snapshots, and the absence of a dedicated selection tool is mitigated by object IDs and filters.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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.
    -
  • F
    license
    A
    quality
    B
    maintenance
    CAD-engineering MCP tool server for parametric modeling, DFM validation, mechanical calculations, and more. Enables code-CAD builds (build123d/CadQuery), model inspection, meshing, and mechanical calculators via MCP stdio.
    11
    -
  • A
    license
    B
    quality
    A
    maintenance
    MCP server that lets AI draw in AutoLISP-capable CAD (reference BricsCAD on Linux) via a file bridge, enabling 2D drafting, 3D solid modeling, and verification with 100 tools.
    128
    1
    Apache 2.0

Appeared in Searches

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/Tianshang301/TianshangCAD'

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