TianshangCAD
This server provides a comprehensive CAD system via MCP, supporting 2D/3D design, editing, validation, rendering, automation, and real-time collaboration.
File Management: Create, open, save, close, list, export (JSON, DXF, STL, STEP, SVG, PDF), and import CAD files.
Object Creation & Editing: Create points, lines, circles, arcs, rectangles, polygons, polylines, boxes, cylinders, spheres, cones; read, update, delete, move, rotate, scale, copy, and erase objects.
Layers: Manage layers with color, linetype, linewidth, visibility, and lock states.
Boolean Operations: Union, subtract, intersect on 3D objects.
Parametric Design: Set and list named variables with units and expressions.
Geometric Constraints: Add, remove, list, and solve constraints (fixed, coincident, parallel, perpendicular, tangent, distance, angle).
Assembly Modeling: Create assemblies, add parts/sub-assemblies, define mates (coincident, concentric, distance, etc.), solve, generate BOM (JSON/CSV), and compute exploded views.
Engineering Drawings: Create sheets (A0–A4), add views (main, projection, section, detail, isometric), dimensions (ISO 129-1), GD&T, and export to SVG/DXF/PDF.
Advanced Features: Sweep along path, loft between profiles, fillet, chamfer, linear/circular/mirror patterns.
Validation & Metrics: Check self-intersections, degenerate faces, non-manifold edges, interferences; compute topology and document metrics.
Rendering: Orthographic (top/front/side) and 3D PNGs at 72–300 DPI, section/exploded views, orbit/turntable GIFs, WebGL delta sync.
Versioning: Save, list, diff (deepdiff), and restore document snapshots.
Natural Language Processing: Parse English/Chinese commands, multi-turn dialogue with anaphora resolution.
Batch Automation: Execute command sequences, schedule cron jobs, run sandboxed Python/SCR scripts, manage job status and templates.
Simulation: Mesh entities, set up and run FEA/kinematics simulations, retrieve results.
Collaboration: Real-time editing via CRDT, sessions, branches, annotations, presence, operation history, and role-based access.
System Status: Check overall health, file/object/layer status, and retrieve logs.
Employs FreeCAD as an optional geometric kernel for CAD modeling operations.
Provides a /metrics endpoint with Prometheus-compatible metrics for monitoring the server.
Exports 3D scene data as Three.js BufferGeometry JSON, enabling visualization in a browser via a bundled Three.js viewer.
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).
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),
ruffandmypyclean.
中文文档: readme/README.zh-CN.md
Changelog · Migration guide v0.6.0 → v0.9.0
Features
CAD CLI —
file,draw,edit,view,measure,layer,batchcommand groups with short aliases (l=draw line,c=draw circle, ...)MCP Server — 20 core JSON-RPC aggregate tools (each with an
actiondiscriminator) over stdio, streamable HTTP or WebSocket (collaboration), callable from Claude, Cursor and other MCP clientsPlugin ecosystem — plugin SDK (manifest + permissions + lifecycle + entry-point discovery) with two official plugins:
plugin-gltf(glTF 2.0 import/export) andplugin-cam(2.5-axis toolpaths → G-code), exposingcad_gltf/cad_cam3D views — JSON-defined
View3DDefinitionwith 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 clientsBatch 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_suggestiondiagnostics; box-box interference volumes; topology metricsRendering — 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 / restoreNatural language —
cad_nlpmaps English / Chinese requests to tool calls with ambiguity handlingJSON-driven — scenes and geometry defined and validated with Pydantic schemas; full import/export round-trip
Pluggable kernel — analytic (default, no native deps) / OCC (
cadquery) / FreeCADFile 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/healthendpointQuality gates —
mypystrict typing,rufflinting,pytestwith 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 basepip 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 theccxsolver binary installed separately; install it from calculix.de and ensureccxis inPATH.
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.debOptional 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,100Short 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 |
| new, open, save, close, list, info, export, import |
| line, circle, arc, rectangle, polygon, polyline, box, cylinder, sphere |
| move, copy, rotate, scale, erase, list, undo, redo |
| zoom, pan, list |
| distance, area, list |
| create, list, set, on, off, delete |
| view, 3d, webgl, view3d, section, explode, gif, views, status |
| 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 stdioStreamable HTTP
python -m tianshangcad --transport http --host 127.0.0.1 --port 8081The 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 |
|
Objects |
|
Layers |
|
JSON |
|
Measure |
|
Validate |
|
Status |
|
Render |
|
3D Views |
|
NLP |
|
Version |
|
Variables |
|
Batch |
|
Constraints |
|
Assembly |
|
Drawing |
|
Features |
|
Simulation |
|
Collaboration |
|
Plugins |
|
glTF (plugin) |
|
CAM (plugin) |
|
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 pronounVersion 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 8082MCP 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 manifestTwo official plugins ship with the package:
plugin-gltf— glTF 2.0 import/export (PBR materials);cad_gltf,gltfCLI.plugin-cam— 2.5-axis contour + drilling toolpaths to G-code;cad_cam,camCLI.
Security: plugins run in-process, in the same trust domain as the server, and are not sandboxed. The MCP
cad_plugininstallaction only loads plugins from installed distributions' entry-points (it never imports an arbitrarymodule:attrpath); 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 -dThe 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.shOr 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.jsonTo 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 testsDocumentation
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 toolscad_assemblyADestructive
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``.
| Name | Required | Description | Default |
|---|---|---|---|
| assembly | Yes | Assembly action to perform, discriminated by `action`: create, add_part, add_subasm, add_mate, remove_part, solve, bom or explode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bom | No | BOM rows |
| csv | No | CSV text when requested |
| name | No | Assembly / node name |
| action | Yes | Assembly action executed |
| status | Yes | Operation status |
| mate_id | No | Mate identifier |
| message | No | Status description |
| node_id | No | Assembly node identifier |
| records | No | Exploded positions |
| mate_type | No | Mate type |
| mate_count | No | Number of mates solved |
| part_count | No | Total number of parts |
| transforms | No | World transform of every node |
| assembly_id | No | Assembly identifier |
TDQS
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.
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.
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.
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.
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.
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_batchADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| batch | No | Batch action to perform, discriminated by `action`: execute (run commands synchronously), schedule, status, cancel, list, templates or run_script. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | Whether a script completed successfully |
| jobs | No | Job summaries |
| name | No | Job name |
| state | No | Job state |
| action | Yes | Batch action |
| job_id | No | Job id |
| status | Yes | Operation status |
| stderr | No | Captured stderr |
| stdout | No | Captured stdout |
| message | No | Status description |
| results | No | Per-command results |
| exit_code | No | Process exit code |
| templates | No | Template names |
| timed_out | No | Whether execution hit the timeout |
| created_at | No | Creation timestamp |
| duration_ms | No | Execution time in milliseconds |
| script_type | No | Script type that ran |
| failed_count | No | Failed commands |
| command_count | No | Number of commands |
| success_count | No | Successful commands |
| blocked_imports | No | Blocked imports |
TDQS
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.
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.
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.
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.
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.
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_camAIdempotent
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 轴轮廓铣削 + 钻孔。
| Name | Required | Description | Default |
|---|---|---|---|
| cam | Yes | CAM action, discriminated by `action`: toolpath, simulate or export_gcode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | Written G-code path |
| action | Yes | Action executed |
| bounds | No | Toolpath bounds |
| status | Yes | Operation status |
| message | No | Status description |
| line_count | No | G-code line count |
| move_count | No | Total tool moves |
| drill_count | No | Number of drill operations |
| est_seconds | No | Estimated machining time (s) |
| path_length | No | Cutting path length (mm) |
| contour_count | No | Number of contour operations |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| collab | Yes | Collab action to perform, discriminated by `tool`: session, branch, annotation, presence, history, resolve, permission or sync. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Collab sub-domain executed |
| state | No | CRDT register state |
| deltas | No | Operation deltas |
| events | No | History events |
| status | Yes | Operation status |
| allowed | No | RBAC check result |
| applied | No | Applied operations |
| members | No | Members with roles |
| message | No | Status description |
| pending | No | Pending conflicts |
| branches | No | Branch summaries |
| presence | No | Presence list |
| sessions | No | Session summaries |
| resolution | No | Conflict resolution |
| session_id | No | Session identifier |
| annotations | No | Annotations |
| conflict_id | No | Resolved conflict id |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| constraint | No | Constraint action, discriminated by `action`: add, remove, list or solve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | No | Constraint type |
| count | No | Number of constraints |
| action | Yes | Constraint action |
| status | Yes | Operation status |
| message | No | Status description |
| entities | No | Referenced entity ids |
| residual | No | Final residual norm |
| converged | No | Whether the solver converged |
| iterations | No | Solver iterations used |
| constraints | No | Constraint records |
| constraint_id | No | Constraint id |
| moved_entities | No | Moved entity ids |
TDQS
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.
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.
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.
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.
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.
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_drawingADestructive
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``.
| Name | Required | Description | Default |
|---|---|---|---|
| drawing | Yes | Drawing action to perform, discriminated by `action`: create, add_view, add_section, add_dimension, add_tolerance, delete or export. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | Exported path |
| paper | No | Paper size |
| width | No | Sheet width in mm |
| action | Yes | Drawing action executed |
| format | No | Export format |
| height | No | Sheet height in mm |
| status | Yes | Operation status |
| message | No | Status description |
| view_id | No | View identifier |
| drawing_id | No | Drawing identifier |
| dimension_id | No | Dimension identifier |
| tolerance_id | No | Tolerance identifier |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| feature | Yes | Feature action to perform, discriminated by `action`: sweep, loft, fillet, chamfer, pattern_linear, pattern_circular or pattern_mirror. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of created instances |
| action | Yes | Feature action executed |
| status | Yes | Operation status |
| message | No | Status description |
| object_id | No | Result object id |
| object_ids | No | Result object ids |
TDQS
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.
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.
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.
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.
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.
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_fileADestructive
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).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | File action to perform, discriminated by `action`: create, open, save, close, delete, list, import or export. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | Saved / exported path |
| files | No | Open files |
| action | Yes | File action executed |
| status | Yes | Operation status |
| file_id | No | File unique identifier |
| message | No | Status description |
| filename | No | File name |
| object_count | No | Number of imported objects |
TDQS
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.
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.
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.
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.
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.
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_gltfAIdempotent
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 网格资产。
| Name | Required | Description | Default |
|---|---|---|---|
| gltf | Yes | glTF action, discriminated by `action`: export, import or preview. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | File path written / read |
| action | Yes | Action executed |
| status | Yes | Operation status |
| message | No | Status description |
| mesh_count | No | Number of meshes exported / imported |
| object_ids | No | Imported object ids |
TDQS
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.
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.
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.
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.
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.
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_jsonARead-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``.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes | JSON action, discriminated by `action`: load, parse, validate, import_geometry, export_geometry, import_scene, export_scene or save. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | Action executed |
| errors | No | Validation errors |
| status | Yes | Operation status |
| content | No | Raw / serialized JSON content |
| message | No | Status description |
| is_valid | No | Validity (parse/validate actions) |
| object_count | No | Number of objects handled |
| imported_objects | No | Imported object summaries |
TDQS
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.
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.
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.
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.
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.
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_layerADestructive
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).
| Name | Required | Description | Default |
|---|---|---|---|
| layer | Yes | Layer action to perform, discriminated by `action`: create, read, update, delete or list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Layer name |
| color | No | Layer color |
| action | Yes | Layer action executed |
| layers | No | Layer definitions |
| locked | No | Lock state |
| status | Yes | Operation status |
| message | No | Status description |
| visible | No | Visibility |
| linetype | No | Line type |
| linewidth | No | Line width |
TDQS
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.
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.
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.
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.
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.
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_measureARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| measure | Yes | Measurement to perform, discriminated by `action`: distance or area. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | Measurement kind: area / volume |
| unit | No | mm^2 for area, mm^3 for volume |
| value | No | Measured value |
| action | Yes | Measurement action executed |
| status | Yes | Operation status |
| message | No | Status description |
| distance | No | Distance between the two points |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nlp | Yes | NLP operation to perform, discriminated by `action`: command or chat. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | Resolved tool name |
| action | Yes | NLP action executed |
| intent | No | Parsed intent / rule name |
| message | No | Status description |
| response | No | Chat response text |
| arguments | No | Resolved arguments |
| confidence | No | Match confidence |
| suggestions | No | Candidate intents |
TDQS
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.
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.
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.
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.
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.
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_objectADestructive
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``.
| Name | Required | Description | Default |
|---|---|---|---|
| object | Yes | Object action to perform, discriminated by `action`: create, read, update, delete, copy, transform, list or boolean. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bbox | No | Bounding box |
| type | No | Object type |
| layer | No | Layer name |
| action | Yes | Object action executed |
| status | Yes | Operation status |
| message | No | Status description |
| objects | No | Object summaries |
| geometry | No | Geometry parameters |
| object_id | No | Object unique identifier |
| result_id | No | Result object id (boolean / copy) |
| properties | No | Object properties |
TDQS
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.
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.
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.
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.
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.
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`` 只管理插件生命周期。
| Name | Required | Description | Default |
|---|---|---|---|
| plugin | Yes | Plugin action, discriminated by `action`: install, uninstall, list, enable, disable or manifest. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Plugin name |
| action | Yes | Plugin action executed |
| status | Yes | Operation status |
| message | No | Status description |
| plugins | No | Installed plugin summaries |
| manifest | No | Plugin manifest |
TDQS
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.
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.
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.
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.
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.
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_renderARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| render | Yes | Render request, discriminated by `mode`: ortho, view_3d, section, explode, animation or webgl. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | Render mode used |
| path | No | Path of the written output file |
| status | Yes | Operation status |
| message | No | Status description |
| payload | No | Extra mode-specific data (webgl deltas) |
| data_uri | No | Output data URI (base64) |
| size_bytes | No | Output size in bytes |
TDQS
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.
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.
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.
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.
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.
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_simADestructive
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sim | Yes | Simulation action to perform, discriminated by `action`: mesh, setup, run, result, list or delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bbox | No | Meshed bounding box |
| kind | No | Simulation kind |
| name | No | Simulation name |
| state | No | Simulation state |
| action | Yes | Simulation action executed |
| result | No | Simulation result payload |
| sim_id | No | Simulation identifier |
| status | Yes | Operation status |
| message | No | Status description |
| results | No | Simulation summaries |
| node_count | No | Mesh node count |
| element_type | No | Element type |
| element_count | No | Mesh element count |
TDQS
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.
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.
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.
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.
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.
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_statusADestructiveIdempotent
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``.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Status query, discriminated by `target`: check, file, object, layer, health, logs_get or logs_clear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Operation status |
| target | Yes | Status target queried |
| message | No | Status description |
| summary | No | Status data |
TDQS
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.
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.
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.
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.
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.
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_validateARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Validation action to perform, discriminated by `action`: geometry, interference, topology or metrics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bbox | No | Document bounding box |
| files | No | Open files |
| kinds | No | Object count by kind |
| pairs | No | Interfering pairs |
| valid | No | Whether all checked objects are valid |
| action | Yes | Validation action executed |
| issues | No | Detected issues |
| layers | No | Total layers |
| status | Yes | Operation status |
| checked | No | Number of objects checked |
| message | No | Status description |
| objects | No | Total objects |
| warnings | No | Topology warnings |
| summaries | No | Per-object topology |
| object_count | No | Number of objects |
| total_volume | No | Sum of all overlap volumes |
| interference_count | No | Number of interfering pairs |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| variable | No | Variable action, discriminated by `action`: set (define/update with value, unit or expr) or list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Variable name |
| unit | No | Unit suffix |
| count | No | Number of variables |
| value | No | Evaluated value |
| action | Yes | Variable action |
| status | Yes | Operation status: success / error |
| message | No | Status description |
| variables | No | Variable records |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version action, discriminated by `action`: save, list, diff or restore a document snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | No | Raw deepdiff result |
| count | No | Number of snapshots |
| label | No | Snapshot label |
| action | Yes | Version action |
| status | Yes | Operation status |
| changes | No | Total number of differences |
| file_id | No | File id |
| message | No | Status description |
| versions | No | Snapshots |
| identical | No | Whether two snapshots are identical |
| version_id | No | Version id |
| added_count | No | Added items |
| removed_count | No | Removed items |
| changed_fields | No | Changed field paths |
TDQS
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.
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.
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.
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.
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.
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_viewADestructive
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.).
| Name | Required | Description | Default |
|---|---|---|---|
| view | Yes | View action to perform, discriminated by `action`: create, read, list, update or delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| view | No | The view definition |
| count | No | Number of views |
| views | No | View definitions |
| action | Yes | View action executed |
| status | Yes | Operation status |
| message | No | Status description |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.13.0- Added
cad_cam - Added
cad_gltf - Added
cad_plugin
85 tool updates
v0.12.0- Added
cad_assembly - Removed
cad_assembly_add_mate - Removed
cad_assembly_add_part - Removed
cad_assembly_add_subasm - Removed
cad_assembly_bom - Removed
cad_assembly_create - Removed
cad_assembly_explode - Removed
cad_assembly_remove_part - Removed
cad_assembly_solve - Changed
cad_batch1 field changed- changed
Input schema / $defs / BatchCommand / properties / tool / descriptionPrevious value: -"Tool name, e.g. cad_object_create"New value: +"Tool name, e.g. cad_object"
- Added
cad_collab - Removed
cad_collab_annotation - Removed
cad_collab_branch - Removed
cad_collab_history - Removed
cad_collab_permission - Removed
cad_collab_presence - Removed
cad_collab_resolve - Removed
cad_collab_session - Removed
cad_collab_sync - Added
cad_drawing - Removed
cad_drawing_add_dimension - Removed
cad_drawing_add_section - Removed
cad_drawing_add_tolerance - Removed
cad_drawing_add_view - Removed
cad_drawing_create - Removed
cad_drawing_delete - Removed
cad_drawing_export - Added
cad_feature - Removed
cad_feature_chamfer - Removed
cad_feature_fillet - Removed
cad_feature_loft - Removed
cad_feature_pattern_circular - Removed
cad_feature_pattern_linear - Removed
cad_feature_pattern_mirror - Removed
cad_feature_sweep - Added
cad_file - Removed
cad_file_close - Removed
cad_file_create - Removed
cad_file_delete - Removed
cad_file_io - Removed
cad_file_list - Removed
cad_file_open - Removed
cad_file_save - Added
cad_layer - Removed
cad_layer_create - Removed
cad_layer_delete - Removed
cad_layer_list - Removed
cad_layer_read - Removed
cad_layer_update - Removed
cad_logs - Added
cad_measure - Removed
cad_measure_area - Removed
cad_measure_distance - Removed
cad_metrics_get - Added
cad_nlp - Removed
cad_nlp_chat - Removed
cad_nlp_command - Added
cad_object - Removed
cad_object_boolean - Removed
cad_object_copy - Removed
cad_object_create - Removed
cad_object_delete - Removed
cad_object_list - Removed
cad_object_read - Removed
cad_object_transform - Removed
cad_object_update - Changed
cad_render6 fields changed- added
Input schema / $defs / RenderAnimationParams / properties / mode / descriptionAdded value: +"Render an orbit animation" - added
Input schema / $defs / RenderExplodeParams / properties / mode / descriptionAdded value: +"Render an exploded view" - added
Input schema / $defs / RenderOrthoParams / properties / mode / descriptionAdded value: +"Render an orthographic 2D view" - added
Input schema / $defs / RenderSectionParams / properties / mode / descriptionAdded value: +"Render a plane section" - added
Input schema / $defs / RenderView3DParams / properties / mode / descriptionAdded value: +"Render a stored 3D view" - added
Input schema / $defs / RenderWebglParams / properties / mode / descriptionAdded value: +"Emit a WebGL sync delta"
- Added
cad_sim - Removed
cad_sim_delete - Removed
cad_sim_list - Removed
cad_sim_mesh - Removed
cad_sim_result - Removed
cad_sim_run - Removed
cad_sim_setup - Changed
cad_status9 fields changed- added
Input schema / $defs / StatusCheckParams / properties / target / descriptionAdded value: +"Query the overall session status" - added
Input schema / $defs / StatusFileParams / properties / target / descriptionAdded value: +"Query file status" - added
Input schema / $defs / StatusHealthParams / properties / target / descriptionAdded value: +"Query server health" - added
Input schema / $defs / StatusLayerParams / properties / target / descriptionAdded value: +"Query layer status" - added
Input schema / $defs / StatusLogsClearParamsAdded 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" +} - added
Input schema / $defs / StatusLogsGetParamsAdded 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" +} - added
Input schema / $defs / StatusObjectParams / properties / target / descriptionAdded value: +"Query object status" - changed
Input schema / properties / status / anyOfPrevious 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" + } +] - changed
Input schema / properties / status / descriptionPrevious 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."
- Added
cad_validate - Removed
cad_validate_geometry - Removed
cad_validate_interference - Removed
cad_validate_topology - Added
cad_view - Removed
cad_view_3d_create - Removed
cad_view_3d_delete - Removed
cad_view_3d_list - Removed
cad_view_3d_read - Removed
cad_view_3d_update
70 tool updates
v0.11.1- Changed
cad_assembly_add_mate6 fields changed- added
Input schema / properties / angle / descriptionAdded value: +"Angle in degrees (for angle mates)" - added
Input schema / properties / axis / descriptionAdded value: +"Axis direction [x, y, z]" - added
Input schema / properties / distance / descriptionAdded value: +"Distance value (for distance/angle mates)" - added
Input schema / properties / mate_type / descriptionAdded value: +"Mate type: coincident, concentric, parallel, perpendicular, distance, angle" - added
Input schema / properties / node_a / descriptionAdded value: +"Anchor node id" - added
Input schema / properties / node_b / descriptionAdded value: +"Target node id"
- Changed
cad_assembly_add_part6 fields changed- added
Input schema / properties / entity_id / descriptionAdded value: +"Referenced document entity id" - added
Input schema / properties / euler / descriptionAdded value: +"Local Euler angles [yaw, pitch, roll]" - added
Input schema / properties / name / descriptionAdded value: +"Part name" - added
Input schema / properties / parent_id / descriptionAdded value: +"Parent node id (sub-assembly)" - added
Input schema / properties / properties / descriptionAdded value: +"Part properties" - added
Input schema / properties / translation / descriptionAdded value: +"Local translation [x, y, z]"
- Changed
cad_assembly_add_subasm2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Sub-assembly name" - added
Input schema / properties / parent_id / descriptionAdded value: +"Parent node id"
- Changed
cad_assembly_bom1 field changed- added
Input schema / properties / format / descriptionAdded value: +"Output format: json or csv"
- Changed
cad_assembly_create1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Assembly name"
- Changed
cad_assembly_explode2 fields changed- added
Input schema / properties / direction / descriptionAdded value: +"Explode direction: x, y or z" - added
Input schema / properties / spacing / descriptionAdded value: +"Offset per level of nesting"
- Changed
cad_assembly_remove_part1 field changed- added
Input schema / properties / node_id / descriptionAdded value: +"Assembly node id to remove (and its subtree)"
- Changed
cad_batch1 field changed- added
Input schema / properties / batch / descriptionAdded value: +"Batch action to perform, discriminated by `action`: execute (run commands synchronously), schedule, status, cancel, list, templates or run_script."
- Changed
cad_collab_annotation7 fields changed- added
Input schema / properties / action / descriptionAdded value: +"add | list | close" - added
Input schema / properties / annotation_id / descriptionAdded value: +"Annotation id (close)" - added
Input schema / properties / by_user / descriptionAdded value: +"Acting user" - added
Input schema / properties / ref / descriptionAdded value: +"Optional referenced key/id (add)" - added
Input schema / properties / scope / descriptionAdded value: +"Annotation scope (add)" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id" - added
Input schema / properties / text / descriptionAdded value: +"Annotation text (add)"
- Changed
cad_collab_branch8 fields changed- added
Input schema / properties / action / descriptionAdded value: +"fork | edit | merge | list" - added
Input schema / properties / branch_id / descriptionAdded value: +"Branch id (edit/merge)" - added
Input schema / properties / by_user / descriptionAdded value: +"Acting user" - added
Input schema / properties / delete / descriptionAdded value: +"Delete instead of write (edit)" - added
Input schema / properties / key / descriptionAdded value: +"Register key (edit)" - added
Input schema / properties / name / descriptionAdded value: +"Branch name (fork)" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id" - added
Input schema / properties / value / descriptionAdded value: +"Register value (edit)"
- Changed
cad_collab_history4 fields changed- added
Input schema / properties / after_seq / descriptionAdded value: +"Only return operations after this seq" - added
Input schema / properties / by_user / descriptionAdded value: +"User requesting history (RBAC check)" - added
Input schema / properties / limit / descriptionAdded value: +"Max operations to return" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id"
- Changed
cad_collab_permission7 fields changed- added
Input schema / properties / action / descriptionAdded value: +"list | grant | check" - added
Input schema / properties / by_user / descriptionAdded value: +"Acting user" - added
Input schema / properties / permission / descriptionAdded value: +"Action for check: read|write|manage|delete" - added
Input schema / properties / role / descriptionAdded value: +"Role to grant: viewer|editor|admin|owner" - added
Input schema / properties / scope / descriptionAdded value: +"Resource scope for check" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id" - added
Input schema / properties / user_id / descriptionAdded value: +"Target user (grant/check)"
- Changed
cad_collab_presence5 fields changed- added
Input schema / properties / action / descriptionAdded value: +"set | get | list" - added
Input schema / properties / cursor / descriptionAdded value: +"Cursor position, e.g. entity id" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id" - added
Input schema / properties / status / descriptionAdded value: +"Presence status (online/busy/away)" - added
Input schema / properties / user_id / descriptionAdded value: +"Target user"
- Changed
cad_collab_resolve4 fields changed- added
Input schema / properties / by_user / descriptionAdded value: +"Acting user" - added
Input schema / properties / conflict_id / descriptionAdded value: +"Conflict id to resolve" - added
Input schema / properties / resolution / descriptionAdded value: +"ours | theirs | latest" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id"
- Changed
cad_collab_session5 fields changed- added
Input schema / properties / action / descriptionAdded value: +"create | list | join | leave | info" - added
Input schema / properties / document_id / descriptionAdded value: +"Document to collaborate on (create)" - added
Input schema / properties / name / descriptionAdded value: +"Session name (create)" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id (join/info/leave)" - added
Input schema / properties / user_id / descriptionAdded value: +"Acting user (identity)"
- Changed
cad_collab_sync5 fields changed- added
Input schema / properties / by_user / descriptionAdded value: +"Acting user" - added
Input schema / properties / include_state / descriptionAdded value: +"Include the full live state" - added
Input schema / properties / ops / descriptionAdded value: +"Operations to apply" - added
Input schema / properties / session_id / descriptionAdded value: +"Session id" - added
Input schema / properties / since / descriptionAdded value: +"Only return operations after this seq"
- Changed
cad_constraint1 field changed- added
Input schema / properties / constraint / descriptionAdded value: +"Constraint action, discriminated by `action`: add, remove, list or solve."
- Changed
cad_drawing_add_dimension5 fields changed- added
Input schema / properties / dim_type / descriptionAdded value: +"linear, angular, radial, diameter or ordinate (ISO 129-1)" - added
Input schema / properties / points / descriptionAdded value: +"Anchor points [[x, y], ...]" - added
Input schema / properties / position / descriptionAdded value: +"Text position [x, y]" - added
Input schema / properties / reference / descriptionAdded value: +"Referenced entity or view id" - added
Input schema / properties / value / descriptionAdded value: +"Dimension value"
- Changed
cad_drawing_add_section5 fields changed- added
Input schema / properties / entity_ids / descriptionAdded value: +"Referenced entity ids" - added
Input schema / properties / name / descriptionAdded value: +"Section view name" - added
Input schema / properties / offset / descriptionAdded value: +"Plane offset along the normal" - added
Input schema / properties / plane / descriptionAdded value: +"Section plane: XY, YZ or XZ" - added
Input schema / properties / translation / descriptionAdded value: +"Sheet offset [x, y]"
- Changed
cad_drawing_add_tolerance4 fields changed- added
Input schema / properties / datum / descriptionAdded value: +"Datum reference, e.g. 'A'" - added
Input schema / properties / reference / descriptionAdded value: +"Referenced entity or view id" - added
Input schema / properties / symbol / descriptionAdded value: +"position, flatness, parallelism, perpendicularity or concentricity" - added
Input schema / properties / value / descriptionAdded value: +"Tolerance value"
- Changed
cad_drawing_add_view6 fields changed- added
Input schema / properties / direction / descriptionAdded value: +"Orthographic direction: top/front/side" - added
Input schema / properties / entity_ids / descriptionAdded value: +"Referenced document entity ids" - added
Input schema / properties / name / descriptionAdded value: +"View name" - added
Input schema / properties / scale / descriptionAdded value: +"View scale factor" - added
Input schema / properties / translation / descriptionAdded value: +"Sheet offset [x, y]" - added
Input schema / properties / view_type / descriptionAdded value: +"main, projection, section, detail or isometric"
- Changed
cad_drawing_create4 fields changed- added
Input schema / properties / drawn_by / descriptionAdded value: +"Title block author" - added
Input schema / properties / name / descriptionAdded value: +"Drawing name" - added
Input schema / properties / paper / descriptionAdded value: +"Paper size: A0, A1, A2, A3, A4" - added
Input schema / properties / title / descriptionAdded value: +"Title block title"
- Changed
cad_drawing_delete1 field changed- added
Input schema / properties / confirm / descriptionAdded value: +"Set to true to confirm deletion"
- Changed
cad_drawing_export2 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Export format: svg, dxf or pdf" - added
Input schema / properties / path / descriptionAdded value: +"Target file path"
- Changed
cad_feature_chamfer5 fields changed- added
Input schema / properties / entity_id / descriptionAdded value: +"Source entity id" - added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / object_id / descriptionAdded value: +"Optional id for the result entity" - added
Input schema / properties / properties / descriptionAdded value: +"Entity properties" - added
Input schema / properties / size / descriptionAdded value: +"Chamfer size"
- Changed
cad_feature_fillet5 fields changed- added
Input schema / properties / entity_id / descriptionAdded value: +"Source entity id" - added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / object_id / descriptionAdded value: +"Optional id for the result entity" - added
Input schema / properties / properties / descriptionAdded value: +"Entity properties" - added
Input schema / properties / radius / descriptionAdded value: +"Fillet radius"
- Changed
cad_feature_loft5 fields changed- added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / object_id / descriptionAdded value: +"Optional id for the result entity" - added
Input schema / properties / profile_ids / descriptionAdded value: +"Profile entity ids, bottom to top" - added
Input schema / properties / properties / descriptionAdded value: +"Entity properties" - added
Input schema / properties / sections / descriptionAdded value: +"Per-profile [x, y, z] placement (defaults to Z stacking)"
- Changed
cad_feature_pattern_circular7 fields changed- added
Input schema / properties / angle / descriptionAdded value: +"Angular span in degrees" - added
Input schema / properties / axis / descriptionAdded value: +"Rotation axis [x, y, z]" - added
Input schema / properties / center / descriptionAdded value: +"Rotation centre [x, y, z]" - added
Input schema / properties / count / descriptionAdded value: +"Number of instances (incl. original)" - added
Input schema / properties / entity_id / descriptionAdded value: +"Source entity id" - added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / properties / descriptionAdded value: +"Copy properties"
- Changed
cad_feature_pattern_linear6 fields changed- added
Input schema / properties / count / descriptionAdded value: +"Total number of instances (incl. original)" - added
Input schema / properties / direction / descriptionAdded value: +"Pattern direction [x, y, z]" - added
Input schema / properties / entity_id / descriptionAdded value: +"Source entity id" - added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / properties / descriptionAdded value: +"Copy properties" - added
Input schema / properties / spacing / descriptionAdded value: +"Spacing between instances"
- Changed
cad_feature_pattern_mirror5 fields changed- added
Input schema / properties / entity_id / descriptionAdded value: +"Source entity id" - added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / plane_normal / descriptionAdded value: +"Mirror plane normal [x, y, z]" - added
Input schema / properties / plane_point / descriptionAdded value: +"A point on the mirror plane [x, y, z]" - added
Input schema / properties / properties / descriptionAdded value: +"Copy properties"
- Changed
cad_feature_sweep5 fields changed- added
Input schema / properties / layer / descriptionAdded value: +"Target layer" - added
Input schema / properties / object_id / descriptionAdded value: +"Optional id for the result entity" - added
Input schema / properties / path / descriptionAdded value: +"Sweep path polyline points [[x,y,z], ...]" - added
Input schema / properties / profile_id / descriptionAdded value: +"Id of the profile entity (circle/rectangle)" - added
Input schema / properties / properties / descriptionAdded value: +"Entity properties"
- Changed
cad_file_close1 field changed- added
Input schema / properties / file_id / descriptionAdded value: +"File id to close (defaults to current)"
- Changed
cad_file_create3 fields changed- added
Input schema / properties / filename / descriptionAdded value: +"File name with extension" - added
Input schema / properties / template / descriptionAdded value: +"Template file path" - added
Input schema / properties / unit / descriptionAdded value: +"Unit: mm, cm, m, in, ft"
- Changed
cad_file_delete1 field changed- added
Input schema / properties / file_id / descriptionAdded value: +"File id to delete"
- Changed
cad_file_io1 field changed- added
Input schema / properties / file / descriptionAdded value: +"File IO action, discriminated by `action`: export the current document (step/dxf/stl/dwg/json) or import a file as a new document."
- Changed
cad_file_open1 field changed- added
Input schema / properties / path / descriptionAdded value: +"File path to open"
- Changed
cad_file_save2 fields changed- added
Input schema / properties / file_id / descriptionAdded value: +"File id to save (defaults to current)" - added
Input schema / properties / path / descriptionAdded value: +"Target path (defaults to current)"
- Changed
cad_json1 field changed- added
Input schema / properties / params / descriptionAdded value: +"JSON action, discriminated by `action`: load, parse, validate, import_geometry, export_geometry, import_scene, export_scene or save."
- Changed
cad_layer_create4 fields changed- added
Input schema / properties / color / descriptionAdded value: +"Layer color as #RRGGBB" - added
Input schema / properties / linetype / descriptionAdded value: +"Line type" - added
Input schema / properties / linewidth / descriptionAdded value: +"Line width" - added
Input schema / properties / name / descriptionAdded value: +"Layer name"
- Changed
cad_layer_delete1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Layer name"
- Changed
cad_layer_read1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Layer name"
- Changed
cad_layer_update6 fields changed- added
Input schema / properties / color / descriptionAdded value: +"New color as #RRGGBB" - added
Input schema / properties / linetype / descriptionAdded value: +"New line type" - added
Input schema / properties / linewidth / descriptionAdded value: +"New line width" - added
Input schema / properties / locked / descriptionAdded value: +"Lock state" - added
Input schema / properties / name / descriptionAdded value: +"Layer name" - added
Input schema / properties / visible / descriptionAdded value: +"Visibility"
- Changed
cad_logs1 field changed- added
Input schema / properties / logs / descriptionAdded value: +"Log action, discriminated by `action`: get (read entries with limit/level/source/job_id filters) or clear."
- Changed
cad_measure_area1 field changed- added
Input schema / properties / object_id / descriptionAdded value: +"Object id to measure"
- Changed
cad_measure_distance2 fields changed- added
Input schema / properties / point_a / descriptionAdded value: +"First point [x, y, (z)]" - added
Input schema / properties / point_b / descriptionAdded value: +"Second point [x, y, (z)]"
- Changed
cad_nlp_chat3 fields changed- added
Input schema / properties / session_id / descriptionAdded value: +"Conversation session id" - added
Input schema / properties / text / descriptionAdded value: +"Free-form user message" - added
Input schema / properties / tool_whitelist / descriptionAdded value: +"Restrict matched intents to these tool names"
- Changed
cad_nlp_command2 fields changed- added
Input schema / properties / text / descriptionAdded value: +"Free-form natural language request" - added
Input schema / properties / tool_whitelist / descriptionAdded value: +"Restrict matches to these tool names"
- Changed
cad_object_boolean6 fields changed- added
Input schema / properties / layer / descriptionAdded value: +"Layer for the result object" - added
Input schema / properties / new_id / descriptionAdded value: +"Optional id for the result object" - added
Input schema / properties / operation / descriptionAdded value: +"Boolean operation to perform" - added
Input schema / properties / operation / examplesAdded value: +[ + "subtract" +] - added
Input schema / properties / target_id / descriptionAdded value: +"Target object id" - added
Input schema / properties / tool_ids / descriptionAdded value: +"Tool object ids to combine"
- Changed
cad_object_copy2 fields changed- added
Input schema / properties / new_id / descriptionAdded value: +"Id for the copy (auto-generated if empty)" - added
Input schema / properties / object_id / descriptionAdded value: +"Object unique identifier"
- Changed
cad_object_create4 fields changed- added
Input schema / properties / layer / descriptionAdded value: +"Target layer name" - added
Input schema / properties / params / descriptionAdded value: +"Geometry parameters, varies by type" - added
Input schema / properties / properties / descriptionAdded value: +"Object properties: color, linetype, linewidth" - added
Input schema / properties / type / descriptionAdded value: +"Object type: line, circle, arc, rectangle, polygon, polyline, box, cylinder, sphere, cone"
- Changed
cad_object_delete1 field changed- added
Input schema / properties / object_id / descriptionAdded value: +"Object unique identifier"
- Changed
cad_object_list1 field changed- added
Input schema / properties / layer / descriptionAdded value: +"Filter by layer"
- Changed
cad_object_read1 field changed- added
Input schema / properties / object_id / descriptionAdded value: +"Object unique identifier"
- Changed
cad_object_transform2 fields changed- added
Input schema / properties / matrix / descriptionAdded value: +"4x4 transformation matrix" - added
Input schema / properties / object_id / descriptionAdded value: +"Object unique identifier"
- Changed
cad_object_update4 fields changed- added
Input schema / properties / layer / descriptionAdded value: +"New layer" - added
Input schema / properties / object_id / descriptionAdded value: +"Object unique identifier" - added
Input schema / properties / params / descriptionAdded value: +"New geometry parameters" - added
Input schema / properties / properties / descriptionAdded value: +"New properties to merge"
- Changed
cad_render1 field changed- added
Input schema / properties / render / descriptionAdded value: +"Render request, discriminated by `mode`: ortho, view_3d, section, explode, animation or webgl."
- Changed
cad_sim_delete1 field changed- added
Input schema / properties / sim_id / descriptionAdded value: +"Simulation id to delete"
- Changed
cad_sim_mesh4 fields changed- added
Input schema / properties / entity_id / descriptionAdded value: +"Entity id to mesh" - added
Input schema / properties / nx / descriptionAdded value: +"Divisions along X" - added
Input schema / properties / ny / descriptionAdded value: +"Divisions along Y" - added
Input schema / properties / nz / descriptionAdded value: +"Divisions along Z"
- Changed
cad_sim_result1 field changed- added
Input schema / properties / sim_id / descriptionAdded value: +"Simulation id"
- Changed
cad_sim_run2 fields changed- added
Input schema / properties / async_run / descriptionAdded value: +"Schedule as an async batch job" - added
Input schema / properties / sim_id / descriptionAdded value: +"Simulation id"
- Changed
cad_sim_setup4 fields changed- added
Input schema / properties / entity_id / descriptionAdded value: +"Target entity id" - added
Input schema / properties / kind / descriptionAdded value: +"Simulation kind: fea or kinematics" - added
Input schema / properties / name / descriptionAdded value: +"Simulation name" - added
Input schema / properties / params / descriptionAdded value: +"Backend parameters"
- Changed
cad_status1 field changed- added
Input schema / properties / status / descriptionAdded value: +"Status query, discriminated by `target`: check, file, object, layer or health."
- Changed
cad_validate_geometry1 field changed- added
Input schema / properties / object_ids / descriptionAdded value: +"Object ids to validate (all when omitted)"
- Changed
cad_validate_interference1 field changed- added
Input schema / properties / object_ids / descriptionAdded value: +"Object ids to check (all when omitted)"
- Changed
cad_variable1 field changed- added
Input schema / properties / variable / descriptionAdded value: +"Variable action, discriminated by `action`: set (define/update with value, unit or expr) or list."
- Changed
cad_version1 field changed- added
Input schema / properties / version / descriptionAdded value: +"Version action, discriminated by `action`: save, list, diff or restore a document snapshot."
- Changed
cad_view_3d_create7 fields changed- added
Input schema / properties / camera / descriptionAdded value: +"Optional camera pose" - added
Input schema / properties / explode / descriptionAdded value: +"Optional explode offsets" - added
Input schema / properties / fit_to_bounds / descriptionAdded value: +"Auto-frame the model bounds" - added
Input schema / properties / name / descriptionAdded value: +"View name (unique per document)" - added
Input schema / properties / projection / descriptionAdded value: +"perspective / orthographic" - added
Input schema / properties / section / descriptionAdded value: +"Optional section plane" - added
Input schema / properties / view_id / descriptionAdded value: +"Optional explicit view id"
- Changed
cad_view_3d_delete1 field changed- added
Input schema / properties / view_id / descriptionAdded value: +"View id to delete"
- Changed
cad_view_3d_read1 field changed- added
Input schema / properties / view_id / descriptionAdded value: +"View id or name to read"
- Changed
cad_view_3d_update6 fields changed- added
Input schema / properties / camera / descriptionAdded value: +"New camera pose" - added
Input schema / properties / explode / descriptionAdded value: +"New explode offsets (null clears)" - added
Input schema / properties / name / descriptionAdded value: +"New name (optional)" - added
Input schema / properties / projection / descriptionAdded value: +"perspective / orthographic" - added
Input schema / properties / section / descriptionAdded value: +"New section plane (null clears)" - added
Input schema / properties / view_id / descriptionAdded value: +"View id to update"
60 tool updates
v0.11.0- Added
cad_assembly_remove_part - Added
cad_batch - Removed
cad_batch_cancel - Removed
cad_batch_execute - Removed
cad_batch_list - Removed
cad_batch_run_script - Removed
cad_batch_schedule - Removed
cad_batch_status - Removed
cad_batch_templates - Removed
cad_boolean_intersect - Removed
cad_boolean_subtract - Removed
cad_boolean_union - Added
cad_constraint - Removed
cad_constraint_add - Removed
cad_constraint_list - Removed
cad_constraint_remove - Removed
cad_constraint_solve - Added
cad_drawing_delete - Added
cad_file_delete - Removed
cad_file_export - Removed
cad_file_import - Added
cad_file_io - Added
cad_json - Removed
cad_json_export_geometry - Removed
cad_json_export_scene - Removed
cad_json_import_geometry - Removed
cad_json_import_scene - Removed
cad_json_load - Removed
cad_json_parse - Removed
cad_json_save - Removed
cad_json_validate - Added
cad_logs - Removed
cad_logs_clear - Removed
cad_logs_get - Added
cad_measure_area - Added
cad_measure_distance - Added
cad_object_copy - Added
cad_object_transform - Added
cad_render - Removed
cad_render_view - Added
cad_sim_delete - Added
cad_status - Removed
cad_status_check - Removed
cad_status_file - Removed
cad_status_health - Removed
cad_status_layer - Removed
cad_status_object - Added
cad_variable - Removed
cad_variable_list - Removed
cad_variable_set - Added
cad_version - Removed
cad_version_diff - Removed
cad_version_list - Removed
cad_version_restore - Removed
cad_version_save - Removed
cad_view_3d_render - Removed
cad_view_animation - Removed
cad_view_explode - Removed
cad_view_section - Removed
cad_webgl_sync
103 tool updates
v0.10.6- First observed
cad_assembly_add_mate - First observed
cad_assembly_add_part - First observed
cad_assembly_add_subasm - First observed
cad_assembly_bom - First observed
cad_assembly_create - First observed
cad_assembly_explode - First observed
cad_assembly_solve - First observed
cad_batch_cancel - First observed
cad_batch_execute - First observed
cad_batch_list - First observed
cad_batch_run_script - First observed
cad_batch_schedule - First observed
cad_batch_status - First observed
cad_batch_templates - First observed
cad_boolean_intersect - First observed
cad_boolean_subtract - First observed
cad_boolean_union - First observed
cad_collab_annotation - First observed
cad_collab_branch - First observed
cad_collab_history - First observed
cad_collab_permission - First observed
cad_collab_presence - First observed
cad_collab_resolve - First observed
cad_collab_session - First observed
cad_collab_sync - First observed
cad_constraint_add - First observed
cad_constraint_list - First observed
cad_constraint_remove - First observed
cad_constraint_solve - First observed
cad_drawing_add_dimension - First observed
cad_drawing_add_section - First observed
cad_drawing_add_tolerance - First observed
cad_drawing_add_view - First observed
cad_drawing_create - First observed
cad_drawing_export - First observed
cad_feature_chamfer - First observed
cad_feature_fillet - First observed
cad_feature_loft - First observed
cad_feature_pattern_circular - First observed
cad_feature_pattern_linear - First observed
cad_feature_pattern_mirror - First observed
cad_feature_sweep - First observed
cad_file_close - First observed
cad_file_create - First observed
cad_file_export - First observed
cad_file_import - First observed
cad_file_list - First observed
cad_file_open - First observed
cad_file_save - First observed
cad_json_export_geometry - First observed
cad_json_export_scene - First observed
cad_json_import_geometry - First observed
cad_json_import_scene - First observed
cad_json_load - First observed
cad_json_parse - First observed
cad_json_save - First observed
cad_json_validate - First observed
cad_layer_create - First observed
cad_layer_delete - First observed
cad_layer_list - First observed
cad_layer_read - First observed
cad_layer_update - First observed
cad_logs_clear - First observed
cad_logs_get - First observed
cad_metrics_get - First observed
cad_nlp_chat - First observed
cad_nlp_command - First observed
cad_object_boolean - First observed
cad_object_create - First observed
cad_object_delete - First observed
cad_object_list - First observed
cad_object_read - First observed
cad_object_update - First observed
cad_render_view - First observed
cad_sim_list - First observed
cad_sim_mesh - First observed
cad_sim_result - First observed
cad_sim_run - First observed
cad_sim_setup - First observed
cad_status_check - First observed
cad_status_file - First observed
cad_status_health - First observed
cad_status_layer - First observed
cad_status_object - First observed
cad_validate_geometry - First observed
cad_validate_interference - First observed
cad_validate_topology - First observed
cad_variable_list - First observed
cad_variable_set - First observed
cad_version_diff - First observed
cad_version_list - First observed
cad_version_restore - First observed
cad_version_save - First observed
cad_view_3d_create - First observed
cad_view_3d_delete - First observed
cad_view_3d_list - First observed
cad_view_3d_read - First observed
cad_view_3d_render - First observed
cad_view_3d_update - First observed
cad_view_animation - First observed
cad_view_explode - First observed
cad_view_section - First observed
cad_webgl_sync
TDQS
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.
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.
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.
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
Related MCP Connectors
Collaborative whiteboard MCP server — create objects, connectors, C4 diagrams, and manage boards
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Lean 4 MCP server: compile, prove theorems, and formalize math with Mathlib.
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server that exposes CAD geometry reasoning over STEP files to LLMs, allowing natural language queries about parts, assemblies, dimensions, holes, and mass properties.-
- AlicenseAqualityAmaintenanceMCP server for Python build123d to help AIs develop and reason about 3D models and CAD3875Apache 2.0
- FlicenseAqualityBmaintenanceCAD-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-
- AlicenseBqualityAmaintenanceMCP 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.1281Apache 2.0
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tianshang301/TianshangCAD'
If you have feedback or need assistance with the MCP directory API, please join our Discord server