add_connector
ChatGPTAdd a connector to a part/assembly. Types: frame|axis|planar|ball. Shafts/hinges/gears need type: axis then revolute mate; rigid mounts need type: frame + fastened.
add_constraint
ChatGPTAdd a sketch constraint.
add_curve
ChatGPTAuthor curves (line/arc/bezier/hermite/…). Inserts into .kcad source.
add_feature
ChatGPTInsert a solid feature (extrude/revolve/fillet/…) into .kcad source.
add_mate
ChatGPTAdd an assembly mate/coupling/transmission. Relation type selects required fields.
add_part
ChatGPTAdd a part instance to an assembly.
add_path_segment
ChatGPTAppend a 2D path segment (line/arc/hermite/…). Inserts into .kcad source.
add_pattern_feature
ChatGPTPattern an existing feature (linear/circular/…).
add_surface
ChatGPTAuthor/finish NURBS surfaces. kind selects nurbs|boundary|loft|revolve|thicken|taper|… — inserts into .kcad source.
add_text
ChatGPTAdd 3D/engraved text feature into .kcad source.
add_variable_sweep
ChatGPTAdd a variable-section sweep feature into .kcad source.
add_workspace_target
ChatGPTAdd a workspace/robotics target.
apply_surface_blend
ChatGPTUse this when you need to author and evaluate a fillet or chamfer on a kernelCAD Shape. Inserts Shape.fillet(radius, selector, { continuity: G1|G2 }) or Shape.chamfer(distance, selector) through the existing public API and returns the patched source plus evaluation diagnostics. Selectors accept EdgeSelector syntax, including canonical edge refs/query strings or { face: canonical name, face label, or face query }. G2 continuity applies to fillets; chamfer uses the existing chamfer API. This authors the operation and does not extract blend-surface NURBS poles; that still requires kernel surface extraction.
capture_animation
ChatGPTCapture an animation/turntable of a model.
design_loop
ChatGPTRun a multi-attempt design/review loop over code/file attempts.
dfm_review
ChatGPTReview a model for manufacturability with pass/fail checks for FDM printing and CNC machining. Pass code/file.
diff_geometry
ChatGPTCompare geometry between two model versions/scripts.
diff_scripts
ChatGPTDiff two .kcad sources.
drawing_to_cad
ChatGPTVector engineering PDF → starter CAD. PNG/scans: use trace_from_image. Hosted: give the file as an https:// URL, a data: URI (base64, max 25 MB) or "asset:<id>" from request_upload (when the file is on the user's device). A file the user attached in this chat is sent in files and used automatically.
evaluate_script
ChatGPTEvaluate .kcad source ({ code } or { file }) → diagnostics + geometry summary. Multi-body assemblies need connectors + mates/joints or mechanism.orphan-part fails (axis+revolute for shafts/hinges/gears; frame+fastened for rigid). Declare partRef.connector before arm.mate; after edits delete stale duplicate/orphaned overlapping bodies. Articulated closed loops (4-bar etc.) are UNSUPPORTED on v0.6.0 — expect assembly.solver.did-not-converge; use an open chain or fastened-only loop (do not invent gear-contact types). Use before open_in_studio.
evaluate_sdf
ChatGPTEvaluate a signed-distance field helper.
execute_cookbook
ChatGPTPrefer after lookup_cookbook for industry demos when you need evaluate + optional Studio in ONE call. Args: id or query; dryRun:false for evidence; openInStudio:true to publish/paint. Different cookbooks are new projects. dryRun:true is NOT evidence. Do not refuse if you only scrolled Write tools — this is a registered MCP tool (read category).
explode_view
ChatGPTUse this when you need an ordered exploded-view plan for an assembly. Supply parts as {name,center:[x,y,z],size:[x,y,z]} in mm, or a LabWired handoff containing parts with ref, position_mm.value and physical.bbox_mm (also accepts bbox_mm.value). Optional explicit assembly_order takes precedence over handoff assembly_order / assembly.order. Missing order falls back to input part order; parts lacking usable placement or bbox and unlisted/unknown order refs are reported. Choose mode axis (default) or radial; axis follows the requested direction, radial moves parts away from the assembly centroid. The result includes ready-to-paste param_declarations, animation_tracks and reverse_animation_tracks for animationView(), part_transforms for existing shapes, and script_fragment. cameraPlan gives framing guidance.
export
ChatGPTExport geometry: target + format + output_path + code/file. Front-only SVG/PDF: options.views:["front"]. Share downloads[].url. On export.deferred poll export({ job_id }).
fab_pack
ChatGPTPackage fabrication files into a ZIP with quote-page links. Hosted downloads are returned in downloads[].url; nothing is uploaded or ordered.
fea_summary
ChatGPTSummarize the latest FEA result.
fetch_part
ChatGPTFetch a bundled catalog part. Prefer await lib.standard.nema17() and await lib.standard.bearing608() (offline). Lookups fail within 45s with parts.lookup.timeout rather than hanging.
fetch_part_model
ChatGPTUse this when a LabWired handoff part needs a STEP or GLB model resolved from a verified HTTPS URL plus SHA-256, or from catalog_id / MPN. The tool uses fetch_part/find_part catalog plumbing, stores URL-fetched bytes in a SHA-256 cache, checks the supplied hash, compares measurable model dimensions with bbox_mm, and returns provenance or a model_not_found result. GLB bounds are checked when POSITION accessor bounds are available; otherwise bbox_check.status is not_checked.
find_part
ChatGPTSearch the bundled catalog. NEMA-17: await lib.standard.nema17(). 608 bearing: await lib.standard.bearing608(). Do not fan out parallel lookups. Remote calls fail within 45s (parts.lookup.timeout).
fit_plane
ChatGPTUse this when you need to fit an orthogonal least-squares plane to XYZ point-cloud data. Returns centroid, deterministic unit normal, signed point residuals, RMS residual and maximum absolute residual. Accepts points already parsed by the caller from scan data or mesh vertices. Computes parameters only; it does not create a surface body. Requires at least three non-collinear finite points.
flatten_pattern
ChatGPTFlatten sheet-metal pattern.
generate_kcad_from_prompt
ChatGPTGenerate a kernelCAD .kcad.ts script from a natural-language prompt and return the evaluated source. BEFORE CALLING: read the kernelcad-authoring MCP resource (or call the lookup_authoring_skill tool if your client does not list resources) so you know the script-authoring conventions, parameter style, and evaluation contract. If neither is available, refer to kernelcad-authoring documentation in the kernelCAD-web repo. INPUT: a single prompt string (up to 8000 characters) describing the part in plain language (e.g. "60x40x5 mounting bracket with two 3mm holes"). Optional partsBudget is informational — quota is debited per successful generation regardless of this value. OUTPUT: { status, kcadSource, evaluationOk, featureCount, diagnostics, title, parameters, suggestions, partial? }. evaluationOk: true means the script parsed and lowered to valid BREP. status: "done" means the script passed the build gates. status: "done_partial" means the run hit its time or token limit (or a provider error) after a script already built: kcadSource is the best script so far and partial says what is unverified — continue by evaluating and refining it. Free-tier accounts: each successful call debits 1 part from the monthly quota; partial results, LLM errors and kernel-evaluator crashes do NOT debit. An identical call made while the same prompt is still generating joins that run instead of starting another. LONG RUNS (MCP): a generation often takes more than 60 s. This call waits at most wait_ms (default 45000, max 50000). If the generation has not finished by then it returns { status: "running", generationId, elapsedMs, stage?, message } instead, and the generation KEEPS RUNNING on the server (it is not cancelled and is billed only if it succeeds). Then call get_generation({ generationId }) — repeat while it returns status "running" — to get exactly the result described above. Do not re-call generate_kcad_from_prompt to check on a run. ON FAILURE: generations that ran but did not validate return a structured failure object — { stage: "llm"|"parse"|"evaluate"|"gates", diagnostics: [{ code?, message, hint?, locus?, margin? }], source: "<last attempted .kcad.ts source or null>", suggestion: "<one-line next action>" }. Failed generations never debit quota. Prefer repairing failure.source against failure.diagnostics over re-prompting from scratch.
get_generation
ChatGPTFetch the result of a generate_kcad_from_prompt run that returned { status: "running", generationId }. Waits up to wait_ms (default 45000, max 50000) for the run to finish. When it has finished, returns exactly what generate_kcad_from_prompt returns: { status: "done" | "done_partial", kcadSource, evaluationOk, featureCount, diagnostics, title, parameters, suggestions, partial? }, or the same error (a structured failure for a generation that did not validate, quota, rate limit). When it is still running, returns { status: "running", generationId, elapsedMs, stage?, progress?, message } — call get_generation again with the same generationId. Only the account that started the generation can read it. Results are kept for 30 minutes after the run ends. Reading a result never debits quota.
get_latest_render
ChatGPTServer-side PNG still by slug — NOT for interactive Studio paint. Prefer open_in_studio (previewDelivered already includes PNG). Use only for a different view, view:"all" contact sheet, or slug-only still. CRITICAL: image is from the MODEL camera, not the user camera.
get_model_mesh
ChatGPTReturn triangle mesh JSON for a project slug — NOT the ChatGPT interactive Studio paint path. For in-chat 3D viewing use open_in_studio (outputTemplate + embed). Prefer open_in_studio.
get_project
ChatGPTRead-only: fetch by slug (source + meshStatus/meshUrl/embedUrl) or list (no slug). Never shows a viewer. Use open_in_studio(+code) once to publish+paint. Poll here when open_in_studio returned meshStatus=building until meshReady=true. viewerPainted stays false until widget ack. Do NOT call get_model_mesh/get_latest_render for interactive paint.
get_project_revision
ChatGPTRead immutable release-pinned source for a slug+version from open_in_studio.
get_selection
ChatGPTUse this when you need to read the human/agent selection in a local Studio session. Returns one clicked face or edge (or null), with mesh-local shapeIndex/kind/id and creating featureId. Use for “this edge”; indices expire on rebuild. featureId is provenance, not the owner of a stable topology ref. Inspect the current shape before authoring a fillet. Requires a running local Studio opened on the same script; hosted sessions are not supported.
import_handoff
ChatGPTUse this when you need to place parts from a LabWired handoff.json into a KernelCAD assembly. Pass the parsed handoff object using schema labwired-kernelcad-handoff/0.1. The tool validates the handoff and returns an evaluable assembly script with corner-anchored bbox placeholder solids, origin/bbox-face/mounting-hole/pin anchors, endpoint connectivity mates for wires whose two endpoint positions are known, and structured cutout_hints from connector faces. These mates express connectivity intent only; no wire geometry or routing is generated. It does not cut enclosure walls or fetch STEP/GLB assets. position_mm locates the bbox lower corner; bbox.center is derived. Null, estimated, proposed, and other non-exact geometry is reported as warnings and omitted or placed at zero as appropriate.
import_step
ChatGPTUse this when the user wants to start from their own STEP or STL file (a part they designed elsewhere, a vendor model). Give exactly one source: url (a public https direct-download link), upload (a file the user attached in ChatGPT), or content_base64 (raw bytes, small files only). Max 50 MB. The format is detected from the bytes (or pass format: 'step' | 'stl'). Writes the file and a starter <name>.kcad.ts whose base body is lib.fromSTEP / lib.fromSTL into output_dir (default: a fresh temp dir), evaluates it, and returns { ok, format, model_path, script_path, code, bbox }. Pass script_path as { file } to evaluate_script, add_feature, dfm_review, export and the other tools, or edit code to build on the body. STL is a mesh: booleans, bbox and export work, but faces stay planar facets (use mesh_to_features for an editable feature tree). A non-watertight STL is refused unless allow_open is true.
inspect
ChatGPTRead model facts. of selects mode (assembly|robot|step|shape|mass|features|assemblies|params|bbox|…). Pass code/file as required by that mode. Hosted: give the file as an https:// URL, a data: URI (base64, max 25 MB) or "asset:<id>" from request_upload (when the file is on the user's device). A file the user attached in this chat is sent in files and used automatically.
list_my_projects
ChatGPTList the signed-in user's saved kernelCAD projects, most recently updated first. Call this when the user wants to continue, change or reopen an earlier model. Then call get_project({ slug }) for the source, and open_in_studio({ project: slug, code }) to save the change as a new revision of that project. Do not create a new project for a model the user already has.
lookup_api
ChatGPTLook up kernelCAD API docs by symbol/keyword.
lookup_authoring_skill
ChatGPTAuthoring skill for .kcad scripts. No args: quick-start + section index; then section: "<id>" or query. section: "all" = full ~108k body.
lookup_cookbook
ChatGPTLook up cookbook recipes for common CAD patterns. After picking an id, prefer execute_cookbook(id, openInStudio) instead of narrating or freehand-pasting.
lookup_diagnostics
ChatGPTLook up diagnostics/error code explanations.
mesh_boolean
ChatGPTUse this when the user wants to union, subtract, or intersect two imported triangle mesh solids (STL, OBJ, or 3MF). Supports union, subtract (A minus B) and intersect. Pass each operand as { file } on the MCP server or { data } with base64 mesh bytes; formats are detected or may be specified. Returns volume in mm³, triangle count and a binary STL as data_base64; pass that payload to import_step to continue modeling. Inputs must be closed, consistently oriented 2-manifold meshes. Open, non-manifold, or invalid meshes return an error. This computes mesh geometry and does not create an editable B-rep feature tree.
mesh_summary
ChatGPTCompact bounds/triangle summary of a project mesh by slug (or code). Fast geometry peek.
mesh_to_features
ChatGPTRecover feature-ish CAD structure from mesh input. Hosted: give the file as an https:// URL, a data: URI (base64, max 25 MB) or "asset:<id>" from request_upload (when the file is on the user's device). A file the user attached in this chat is sent in files and used automatically.
open_in_studio
ChatGPTONLY tool for interactive ChatGPT paint: save/publish + Studio viewer (outputTemplate) in one step. ONE VIEWER PER PROJECT PER RESPONSE: validate with evaluate_script first, then call this exactly once; reuse the returned URL, revision and preview — never call it again after a success in the same response. Unchanged code+project returns the same revision (no new revision). ALWAYS pass code when you have it (avoids no_code_to_reuse); evaluate_script reuse is fallback. Multi-body assemblies: add connectors + mates/joints first (axis+revolute for shafts/hinges/gears; frame+fastened for rigid) or evaluate_script reports mechanism.orphan-part / disconnected components. Articulated closed loops (4-bar) unsupported on v0.6.0 — open chain or fastened-only. Phases: projectSaved / meshReady / previewDelivered set here; viewerPainted is ONLY true after widget model-context/widgetState ack — never claim paint from this tool alone. Waits ~20s for mesh; meshStatus=building+meshUrl is TRANSIENT (poll get_project, which shows no viewer — not a 404 failure; do not re-call open_in_studio). Do NOT call get_model_mesh or get_latest_render for interactive paint. CONTINUE, DO NOT DUPLICATE: pass project:'<slug>' from the last result to add a revision; without it this chat's project is updated. new_project:true only for a separate model. ok=false + meshStatus=failed is a hard mesh failure. MARK & FIX: a user message "Edit kernelCAD project <slug> (revision N): ... Targets: #1 feature "<id>" ..." comes from viewer pins; ids are the script's feature/part names — get_project(slug), change only those features near the given mm points, then open_in_studio with the same project. Hosted: lib.fromSTEP / fromSTL / fromDXF / fromSVG and referenceImage accept "asset:<id>" (from request_upload), an https:// URL or a data: URI as the path. A file the user attached in this chat is sent in files; use "upload:0" (or "upload:<file name>") as the path.
order_part
ChatGPTOrder the part made: creates the production request and returns a pay_url for the user. Propose the manufacturing method from the user's words and the part, pass it as method with a one-line reason. The price is the real maker price; never invent or send one. Tell the user the card is only held, and a person confirms the final price before charging. If the result is status "pricing", the price is still being worked out: call again in a few seconds.
price_part
ChatGPTStart or read the real price for making the part. Cheap. Returns status "ready" with estimate_cents and summary, or "pricing" while the makers are asked (call again in a few seconds). Creates nothing and charges nothing.
project_curve
ChatGPTProject a curve onto a face/plane into .kcad source.
query
ChatGPTQuery model/script facts (features, params, bindings).
ray_pick
ChatGPTUse this when you need the faces a ray hits in a local Studio model, nearest first, with points, distances, and normals. Inputs are model units (mm); direction is normalized. Requires the local Studio URL and session token for the same script, reads the current model generation, and returns a set_selection argument object with every hit. feature_id must identify a displayed terminal shape; intermediates have no current viewer shapeIndex. Intersections use the viewer per-face tessellation, so curved-surface points and normals are mesh approximations.
remove_feature
ChatGPTRemove a feature from .kcad source by id.
render_preview
ChatGPTRender deterministic PNG views from code/file for visual self-check (no Studio required). Prefer views:["iso"] while iterating. PNGs return inline as image content + images[].url links; images[].path is server-only.
repair_script
ChatGPTAttempt automatic repair of broken .kcad source.
request_upload
ChatGPTUse this when the user has a photo, PDF drawing, STEP, STL, DXF, SVG or 3MF file on their device and you need it in a kernelCAD tool (trace_from_image, drawing_to_cad, mesh_to_features, inspect of:"step", or lib.fromSTEP / fromSTL / fromDXF / fromSVG / referenceImage in a script). Do not ask the user to paste the file as text or base64, and do not type coordinates from an image by hand. Returns a one-time uploadUrl (valid 30 minutes) and an asset reference. Give the user the link; after they say the upload is done, pass the asset value ("asset:<id>") as the file argument, for example trace_from_image({ imageUrl: "asset:<id>" }) or lib.fromSTEP("asset:<id>"). If the file is already at a public https:// URL, pass that URL instead. On clients that support MCP URL elicitation the upload page opens for the user directly and the call returns once the file is stored (status "uploaded"); then use the asset right away without asking the user anything. If the user already attached the file in this chat, do not call this tool: the file-taking tools receive it in their files argument (reference it as "upload:0" or "upload:<file name>"). Use this only when the file is not attached, or when an attached file did not arrive in files (some clients, e.g. Codex, do not pass attachments to tools).
resolve_assumptions
ChatGPTResolve authoring assumptions/defaults for a prompt or script.
review_cad
ChatGPTReview CAD source for issues (style, manufacturability, structure). Pass code/file.
review_paint_peek_latest
ChatGPTFetch the latest painted review feedback for a project slug (or signed-in user).
route_wires
ChatGPTUse this when you need a first-pass orthogonal pin-to-pin wire route estimate and clearance check. Accepts a LabWired handoff or explicit wire positions in millimetres, returns path length and bend count, and reports collisions against part bounding boxes. Wires whose endpoint positions are null are reported as unresolved. Read-only analysis; it does not create or certify a physical harness.
run_fea
ChatGPTRun a lightweight FEA/load check on the model.
set_param
ChatGPTSet a script parameter default (number or expression string).
set_scene_return
ChatGPTSet the scene return/camera framing hint.
set_selection
ChatGPTUse this when you need to replace the shared local Studio face/edge selection, or clear it with selection:null. The viewer highlights the pick on its next sync (300 ms). Does not edit geometry. Pass model_generation from get_selection. Use indices from the current viewer mesh/get_selection; they expire on rebuild. Requires a local Studio session.
solve_mates
ChatGPTSolve assembly mates and report status.
solve_sketch
ChatGPTSolve sketch constraints and return updated geometry.
sweep_tolerance
ChatGPTSweep/tolerance analysis helper for fits and clearances.
trace_from_image
ChatGPTTrace curves/regions from an image into .kcad path/sketch calls. Hosted: give the file as an https:// URL, a data: URI (base64, max 25 MB) or "asset:<id>" from request_upload (when the file is on the user's device). A file the user attached in this chat is sent in files and used automatically.
verify
ChatGPTRun verification checks on a model (geometry/DFM/constraints/load capacity, incl. FEA). Pass the check set + code/file.
why_did_this_fail
ChatGPTExplain a failed evaluate/build from diagnostics.
add_assembly_part_source
Claudeadd_connector
Claudeadd_constraint
Claudeadd_feature
Claudeadd_hermite_g2
Claudeadd_mate
Claudeadd_mate_coupling_source
Claudeadd_mate_source
Claudeadd_nurbs_curve
Claudeadd_nurbs_surface
Claudeadd_part_connector_source
Claudeadd_path_hermite_g2
Claudeadd_path_nurbs_segment
Claudeadd_path_spline
Claudeadd_pattern_feature
Claudeadd_sketch_text
Claudeadd_surface_from_boundary
Claudeadd_transmission_source
Claudeadd_variable_sweep
Claudeadd_workspace_target_source
Claudecheck_load_capacity
Claudecheck_mounting_hole_consistency
Claudecheck_reachable
Claudecheck_swept_collision
Claudedesign_loop
Claudedfm_preflight
Claudeemboss_text
Claudeevaluate_query
Claudeevaluate_script
Claudeevaluate_sdf
Claudeexport_model
Claudeflatten_pattern
Claudegenerate_kcad_from_prompt
Claudeget_bend_table
Claudeget_edges_of
Claudeget_face_lineage
Claudeget_shape_info
Claudeinspect_assembly
Claudeinspect_robot
Claudelist_api
Claudelist_assemblies
Claudelist_constraints
Claudelist_diagnostic_codes
Claudelist_edges
Claudelist_face_labels
Claudelist_faces
Claudelist_features
Claudelist_mates
Claudelist_topology
Claudelookup_authoring_skill
Claudelookup_cookbook
Claudeparams_list
Claudeparams_update
Claudeproject_curve
Clauderemove_feature
Clauderesolve_topo_ref
Claudereview_cad
Claudereview_paint_peek_latest
Claudeset_param_value
Claudeset_scene_return_source
Claudesolve_mates
Claudesolve_sketch
Claudetrace_from_image
Claudevalidate_assembly
Claudevalidate_urdf
Claudewhy_did_this_fail
Claude