{"apiVersion":"v1","directorySlug":"kernelcad-mcp-d51c6f665f","title":"kernelCAD — from words to manufacturable geometry","description":"Describe what you need and kernelCAD designs the part, checks it holds together, and hands you a file your shop can manufacture.","pageUrl":"https://www.mcpbundles.com/skills/kernelcad-mcp-d51c6f665f","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.kernelcad.com/mcp","hostedMcpUrl":null,"toolCount":54,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.kernelcad/kernelcad-mcp-d51c6f665f","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"review_paint_peek_latest","description":"Return the newest brush-painted review packet from a Studio session. After sharing a /p/<slug> link, the user can open it in the browser and paint marks over the 3D viewport to give visual feedback. Call this tool with the `slug` from that link to see the strokes — screenshot + mask + struck part names plus an optional one-line note and intent tags (e.g. \"too thick\", \"missing\", \"wrong angle\") describing WHAT is wrong — and act on the feedback. The slug is the capability: no OAuth required when p","inputSchema":{"type":"object","properties":{"slug":{"type":"string"},"paths_only":{"type":"boolean"},"freshness_sec":{"type":"integer","minimum":1}},"additionalProperties":false},"title":"Get Latest Painted Review Feedback","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"review_paint_peek_latest","displayName":"Get Latest Painted Review Feedback"},{"name":"open_in_studio","description":"Save/publish the current kernelCAD model AND display it in one step: persists the project, returns the interactive Studio viewer (MCP Apps / ChatGPT outputTemplate), and includes a PNG preview in the SAME tool result (image content + previewUrl when available). Use this when the user wants to SEE or share the model — do NOT call get_latest_render afterwards for the happy path; the preview is already here when previewDelivered is true. Pass the full `.kcad` source as `code` (optional if you just","inputSchema":{"type":"object","required":[],"properties":{"code":{"type":"string","minLength":1},"slug":{"type":"string","minLength":1},"parameters":{"type":"array","items":{"type":"object","required":["name","defaultValue","kind"],"properties":{"max":{"type":"number"},"min":{"type":"number"},"kind":{"enum":["number","integer","boolean","string"],"type":"string"},"name":{"type":"string","maxLength":40,"minLength":1},"step":{"type":"number"},"unit":{"type":"string","maxLength":8},"defaultValue":{"oneOf":[{"type":"number"},{"type":"boolean"},{"type":"string"}]}}}},"attachments":{"type":"array","items":{"type":"object","required":["path"],"properties":{"path":{"type":"string","maxLength":240,"minLength":1},"assetSha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"bytesBase64":{"type":"string"}},"additionalProperties":false},"maxItems":32},"include_preview":{"type":"boolean"}},"additionalProperties":false},"title":"Open in Studio","logicalName":"open_in_studio","displayName":"Open in Studio","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_project","description":"Use this when you need to reopen a saved project or browse what the user has saved — it fetches a kernelCAD Studio project, or lists the signed-in user's saved projects. Pass `slug` (from a /p/<slug> link or a prior listing) to fetch that project's full .kcad source and metadata — then edit and open_in_studio with the same slug so the user's open tab updates live. Private projects require their owner's OAuth connection. OMIT `slug` to list the signed-in user's saved projects (most recently updat","inputSchema":{"type":"object","properties":{"slug":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Get Project","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_project","displayName":"Get Project"},{"name":"get_project_revision","description":"Fetch the exact immutable .kcad source and parameters captured at a prior `open_in_studio` version. Use this to read-after-write verify a release: pass the returned `slug` and `version`, then hash or inspect the returned source. Public/unlisted projects use the slug as capability; private projects require the owner's OAuth connection.","inputSchema":{"type":"object","required":["slug","version"],"properties":{"slug":{"type":"string","minLength":1},"version":{"type":"integer","minimum":1}},"additionalProperties":false},"title":"Get Project Revision","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_project_revision","displayName":"Get Project Revision"},{"name":"get_latest_render","description":"Render a project's current model server-side and return it as an inline image so you can SEE what you built. Prefer open_in_studio for the happy path — it already includes an iso PNG preview in the same publish result when previewDelivered is true. Use this tool for a different `view`, a contact sheet (`view:\"all\"`), or when you only have a slug and are not publishing. Call with that `slug` to inspect whether the build looks right. CRITICAL — the image is rendered from the MODEL on the server; i","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","minLength":1},"view":{"enum":["all","iso","front","back","left","right","top"],"type":"string"},"paths_only":{"type":"boolean"}},"additionalProperties":false},"title":"Get Latest Render","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_latest_render","displayName":"Get Latest Render"},{"name":"get_model_mesh","description":"Return the raw per-feature triangle mesh (positions/indices/normals) of a project's current model, by slug. For the in-chat 3D viewer widget to render geometry; delivered over the MCP Apps bridge. The slug is the capability: public/unlisted need no OAuth; private requires the owner signed in.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Get Model Mesh","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_model_mesh","displayName":"Get Model Mesh"},{"name":"lookup_authoring_skill","description":"Return the kernelcad-authoring SKILL.md body — conventions for writing .kcad.ts scripts (imports, parameters, evaluation contract, common pitfalls).","inputSchema":{"type":"object","properties":{}},"title":"Look Up Authoring Skill","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"lookup_authoring_skill","displayName":"Look Up Authoring Skill"},{"name":"mesh_summary","description":"Mesh a kernelCAD .kcad.ts source server-side and return a COMPACT geometry summary — overall bounds plus, per feature, its id, kind, triangle count, and bounding box.","inputSchema":{"type":"object","required":["source"],"properties":{"params":{"type":"object","additionalProperties":{"type":"number"}},"source":{"type":"string","minLength":1},"fileName":{"type":"string"}},"additionalProperties":false},"title":"Summarize Mesh Geometry","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"mesh_summary","displayName":"Summarize Mesh Geometry"},{"name":"evaluate_script","description":"Use this when you need to run a script and check it compiles. Run a kernelCAD .kcad.ts script and report pass/fail + feature count + diagnostics. When the scene is assembly-built (assembly().part(...) → .model()/.solvedModel()), also returns a parts summary { count, names } AND runs the mechanism-truth gate by default: the `mechanism` field reports real/broken/unverified and a broken mechanism (self-collision, fastened drift, dof-mismatch) makes ok:false with the failures in diagnostics. Pass {","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"dryRun":{"type":"boolean"},"skipMechanismCheck":{"type":"boolean"}}},"title":"Evaluate CAD Script","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"evaluate_script","displayName":"Evaluate CAD Script"},{"name":"diff_scripts","description":"Use this when you need to see exactly what changed between two script versions. Structured geometric delta between two versions of a kernelCAD script — a baseline ({ baseFile } or { baseCode }) and a revision ({ file } or { code }). Returns agent-readable JSON: per-part added/removed/renamed/changed (volume mm³ + exact bbox deltas, numbers matching inspect({ of: 'part-stats' })), total interference-volume delta with per-pair detail, mate-graph changes (added/removed/changed mates incl. type, con","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"baseCode":{"type":"string"},"baseFile":{"type":"string"}}},"title":"Diff CAD Scripts","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"diff_scripts","displayName":"Diff CAD Scripts"},{"name":"inspect","description":"Use this when you need to read facts about a model. One reader, selected by `of`:\n- 'assembly' — physical assembly inventory (parts, bboxes, connectors, mates, disconnected solids).\n- 'robot' — URDF/SDFormat export preview (links, joints, planning groups, end-effectors, issues).\n- 'step' — inspect an imported STEP file.\n- 'shape' — volume / surfaceArea / bbox for one feature ({ feature_id? }).\n- 'mass' — mass, centre of mass, centroidal inertia tensor (inertia6 + 3x3 inertiaMatrix), principalMom","inputSchema":{"type":"object","required":["of"],"properties":{"at":{"type":"number"},"of":{"enum":["assembly","robot","step","shape","mass","features","assemblies","topology","edges","face-edges","faces","face-labels","mates","constraints","part-stats","bend-table","params","part-categories","part-families","bom","section","continuity","curvature"],"type":"string"},"axis":{"enum":["x","y","z"],"type":"string"},"code":{"type":"string"},"file":{"type":"string"},"edges":{},"faces":{},"plane":{"type":["string","object"]},"query":{"type":"object"},"stack":{"type":"object","required":["from","to","count"],"properties":{"to":{"type":"number"},"axis":{"enum":["x","y","z"],"type":"string"},"from":{"type":"number"},"count":{"type":"integer"}}},"density":{"type":"number"},"assembly":{"type":"string"},"category":{"type":"string"},"face_name":{"enum":["top","bottom","left","right","front","back"],"type":"string"},"feature_id":{"type":"string"},"spike_factor":{"type":"number"},"gyration_axis":{"type":"object","required":["origin","direction"],"properties":{"origin":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"direction":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}}}},"title":"Inspect Model","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"inspect","displayName":"Inspect Model"},{"name":"why_did_this_fail","description":"Use this when you need to trace why a feature failed. Walk the upstream chain of a failing feature. Returns the diagnostics of the requested feature plus the diagnostics of every upstream feature in topological order (the requested feature is the last entry). Per-code hints are inline on every diagnostic — call lookup_diagnostics for the full catalogue. Pass { file?, code?, feature_id? }.","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"feature_id":{"type":"string"}}},"title":"Explain Failure","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"why_did_this_fail","displayName":"Explain Failure"},{"name":"set_param","description":"Use this when you need to edit a param() default value in a kernelCAD script. Returns the modified code as text plus diagnostics from re-evaluating the result. Caller persists the new code via standard file-write tools (this tool has no side effects).","inputSchema":{"type":"object","required":["code","param_name","new_value"],"properties":{"code":{"type":"string"},"new_value":{"oneOf":[{"type":"number"},{"type":"string"}]},"param_name":{"type":"string"}}},"title":"Set Parameter","logicalName":"set_param","displayName":"Set Parameter","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_feature","description":"Use this when you need to insert a new feature line into a script. Insert a new feature line into a kernelCAD script before the last top-level return statement. Returns the modified code as text plus diagnostics from re-evaluating the result. Side-effect-free. Primitives that accept faceLabels (box, cylinder, extrudeRect, extrudeCircle, extrudePolygon, extrudeRoundedRect) can receive `opts.faceLabels` in the inserted code — use `lookup_api` to see `featureKindFaceLabels` for the full value schem","inputSchema":{"type":"object","required":["code","feature_code"],"properties":{"code":{"type":"string"},"feature_code":{"type":"string"}}},"title":"Add Feature","logicalName":"add_feature","displayName":"Add Feature","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_curve","description":"Use this when you need a freeform/organic 3D curve — a body feature line, brow, spine rail, or G2 blend between panels — authored as a Curve3D into the user's .kcad.ts immediately before the last top-level return. One authoring path, selected by `kind`:\n- 'nurbs' — insert a `nurbsCurve(controlPoints, opts?)` declaration. Pass `controlPoints` as a Vec3[] (mm, at least 2 points). Optional NURBS knobs: `degree` (default 3), rational `weights`, explicit `knots`, `closed`.\n- 'hermite' — insert a `her","inputSchema":{"type":"object","allOf":[{"if":{"properties":{"kind":{"const":"nurbs"}}},"then":{"required":["controlPoints"]}},{"if":{"properties":{"kind":{"const":"hermite"}}},"then":{"required":["a","b"]}}],"required":["kind","code"],"properties":{"a":{"type":"object","required":["point","tangent"],"properties":{"point":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"tangent":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"curvature":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}},"b":{"type":"object","required":["point","tangent"],"properties":{"point":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"tangent":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"curvature":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}},"code":{"type":"string"},"kind":{"enum":["nurbs","hermite"],"type":"string"},"knots":{"type":"array","items":{"type":"number"}},"closed":{"type":"boolean"},"degree":{"type":"integer","minimum":1},"weights":{"type":"array","items":{"type":"number"}},"binding_name":{"type":"string"},"controlPoints":{"type":"array","items":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}}},"title":"Add Curve","logicalName":"add_curve","displayName":"Add Curve","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"trace_from_image","description":"Use this when you need to trace features from a reference photo into waypoints. Trace pixel-space features from a reference photo into normalized [0..1] waypoints the agent can map to mm via a known scale anchor and feed to path().spline / path().nurbsSegment. Three backends are dispatched behind the scenes: `opencv` (deterministic; uniform-bg silhouette only), `vision-llm` (Claude vision; named points/cluttered backgrounds; caller-supplied ANTHROPIC_API_KEY), and `hybrid` (opencv silhouette + L","inputSchema":{"type":"object","required":["imageUrl"],"properties":{"hint":{"type":"string"},"priors":{"type":"array","items":{"type":"object","required":["id","statement","value","confidence"],"properties":{"id":{"type":"string"},"value":{},"statement":{"type":"string"},"confidence":{"type":"number","maximum":1,"minimum":0}}}},"backend":{"enum":["opencv","vision-llm","hybrid","auto"],"type":"string"},"features":{"type":"array","items":{"type":"object","required":["label","kind"],"properties":{"kind":{"enum":["silhouette","curve","point","bbox"],"type":"string"},"label":{"type":"string"},"region":{"type":"string"}}}},"imageUrl":{"type":"string"},"validate":{"enum":["warn","error"],"type":"string"},"scaleAnchor":{"type":"object","required":["pixelDistance","realDistance","unit"],"properties":{"unit":{"enum":["mm","cm","in"],"type":"string"},"realDistance":{"type":"number"},"pixelDistance":{"type":"number"}}},"maxWaypointsPerFeature":{"type":"integer","minimum":2}}},"title":"Trace Outline from Image","logicalName":"trace_from_image","displayName":"Trace Outline from Image","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_variable_sweep","description":"Use this when you need an organic swept solid whose cross-section changes along its length — a tapering body, horn, bottle, fairing, or duct — authored as a variable-section sweep along a spine. Insert a `variableSweep(spine, sections, opts?)` declaration into the user's .kcad.ts immediately before the last top-level return. The result is a Shape — chain `.translate(...)`, `.union(...)`, etc. via `add_feature`. `spine_binding` references an existing variable (Curve3D / Sketch / Vec3[]) in the so","inputSchema":{"type":"object","required":["code","spine_binding","sections"],"properties":{"code":{"type":"string"},"closed":{"type":"boolean"},"sections":{"type":"array","items":{"type":"object","required":["t","profile_binding"],"properties":{"t":{"type":"number"},"profile_binding":{"type":"string"}}}},"continuity":{"enum":["C0","C1","C2"],"type":"string"},"binding_name":{"type":"string"},"spine_binding":{"type":"string"}}},"title":"Add Variable Sweep","logicalName":"add_variable_sweep","displayName":"Add Variable Sweep","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_text","description":"Use this when you need to author text into a kernelCAD script before the last top-level return. One authoring path, selected by `mode`:\n- 'sketch' — insert a sketch.text(...) call. The emitted sketch is chainable: pair with subsequent .extrude(...) / cut(...) edits to land an engraved or raised text feature.\n- 'emboss' — insert a `<shape>.embossText({...})` chained call onto an existing Shape `target`. Use for engraved brand text on faces (Ray-Ban temple, CE mark, model number). `depth > 0` rais","inputSchema":{"type":"object","required":["mode","code"],"properties":{"code":{"type":"string"},"face":{"type":"string"},"font":{"type":"string"},"mode":{"enum":["sketch","emboss"],"type":"string"},"size":{"type":"number"},"align":{"enum":["left","center","right"],"type":"string"},"depth":{"type":"number"},"bindAs":{"type":"string"},"target":{"type":"string"},"anchorU":{"type":"number"},"anchorV":{"type":"number"},"content":{"type":"string"},"position":{"type":"array","items":{"type":"number"},"maxItems":2,"minItems":2},"rotation":{"type":"number"},"scaleMode":{"enum":["original","native","bounds"],"type":"string"},"fontFamily":{"type":"string"},"textContent":{"type":"string"}}},"title":"Add Text","logicalName":"add_text","displayName":"Add Text","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"project_curve","description":"Use this when you need to wrap a 2D closed curve onto a 3D face. Insert a `<shape>.projectCurve({ source, face, scaleMode? })` chained call into a kernelCAD script. The `source` is the structured `{ kind: \"sketchCommands\", commands: [...] }` wire format the runtime API accepts. Wraps the curve onto the face along the face normal; pair with `.extrude(d)` / `.cut(...)` for raised or engraved logos on curved bodies. Open-wire projection (`asEdge: true`) is not implemented and is rejected at edit ti","inputSchema":{"type":"object","required":["code","target","commands","face"],"properties":{"code":{"type":"string"},"face":{"type":"string"},"asEdge":{"type":"boolean"},"bindAs":{"type":"string"},"target":{"type":"string"},"commands":{"type":"array","items":{"type":"object","required":["kind"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"kind":{"enum":["moveTo","lineTo","close"],"type":"string"}}}},"scaleMode":{"enum":["original","native","bounds"],"type":"string"}}},"title":"Project Curve","logicalName":"project_curve","displayName":"Project Curve","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_pattern_feature","description":"Use this when you need to repeat a feature in a pattern. Insert a Shape.patternLinear / .patternCircular / .patternGrid call into a kernelCAD script before the last top-level return. Pass structured args (kind + the matching spec object). Returns the modified code plus diagnostics from re-evaluating. Side-effect-free. The pattern feature is a single editable unit; pattern-instance face refs resolve via `<sourceId>_pattern_<i>` on the pattern feature's lineage. Geometric note: pattern is implemen","inputSchema":{"type":"object","allOf":[{"if":{"properties":{"kind":{"const":"linear"}}},"then":{"required":["linear"]}},{"if":{"properties":{"kind":{"const":"circular"}}},"then":{"required":["circular"]}},{"if":{"properties":{"kind":{"const":"grid"}}},"then":{"required":["grid"]}}],"required":["code","target","kind"],"properties":{"code":{"type":"string"},"grid":{"type":"object","required":["x","y"],"properties":{"x":{"type":"object","required":["count","direction","spacing"],"properties":{"count":{"type":"integer","minimum":2},"spacing":{"type":"number"},"direction":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}},"y":{"type":"object","required":["count","direction","spacing"],"properties":{"count":{"type":"integer","minimum":2},"spacing":{"type":"number"},"direction":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}}}},"kind":{"enum":["linear","circular","grid"],"type":"string"},"linear":{"type":"object","required":["count","direction","spacing"],"properties":{"count":{"type":"integer","minimum":2},"spacing":{"type":"number"},"direction":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}},"target":{"type":"string"},"circular":{"type":"object","required":["count","axis"],"properties":{"axis":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"count":{"type":"integer","minimum":2},"angleDeg":{"type":"number"}}},"assign_to":{"type":"string"}}},"title":"Add Pattern Feature","logicalName":"add_pattern_feature","displayName":"Add Pattern Feature","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"remove_feature","description":"Use this when you need to remove a feature line from a script. Remove a single line from a kernelCAD script identified by a substring match. Returns the modified code plus diagnostics from re-evaluating. Refuses to remove the line containing the return statement. Side-effect-free.","inputSchema":{"type":"object","required":["code","match"],"properties":{"code":{"type":"string"},"match":{"type":"string"}}},"title":"Remove Feature","logicalName":"remove_feature","displayName":"Remove Feature","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"query","description":"Use this when you need to resolve or inspect topology against a script's lowered geometry. Selected by `mode` (default 'evaluate'):\n- 'evaluate' — inspect a Query (@kc[...] ref, @kcq[...] DSL, or { ast }); returns matched entities. Pass expect:'unique' to assert exactly-one.\n- 'resolve' — resolve a single @kc[...] / @kcq[...] ref to one entity ({ ref }).\n- 'lineage' — walk the HistoryMap for a named face ref ({ feature_id, ref }).\nAll params except `mode` are forwarded verbatim.","inputSchema":{"type":"object","properties":{"ref":{"type":"string"},"code":{"type":"string"},"file":{"type":"string"},"mode":{"enum":["evaluate","resolve","lineage"],"type":"string"},"query":{},"expect":{"enum":["any","unique"],"type":"string"},"feature_id":{"type":"string"}}},"title":"Query Geometry","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"query","displayName":"Query Geometry"},{"name":"lookup_api","description":"Use this when you need to list the kernelCAD script-runtime surface: global functions (box, path, selectEdges, helix, etc), Shape methods (fillet, sweep, lower, etc), Sketch methods (extrude, revolve, sweep), PathBuilder methods, EdgeQuery/FaceQuery key sets, and featureKindFaceLabels (which globals accept opts.faceLabels and valid value shapes). Use this to discover what is callable from a .kcad.ts script. Call this BEFORE concluding kernelCAD lacks a capability — its NURBS freeform surfacing (","inputSchema":{"type":"object","properties":{}},"title":"Look Up API","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"lookup_api","displayName":"Look Up API"},{"name":"lookup_diagnostics","description":"Use this when you need the kernelCAD 26-code diagnostic catalogue with hint templates. Tiny one-shot call; useful for an agent that wants to pre-populate retry strategies. Hints are also inline on every emitted diagnostic — this tool just gives you the canonical list up front.","inputSchema":{"type":"object","properties":{}},"title":"Look Up Diagnostics","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"lookup_diagnostics","displayName":"Look Up Diagnostics"},{"name":"export","description":"Use this when you need to export geometry to a file. One exporter, selected by `target`:\n- target:'model' — export the script geometry to one file. Pass { file | code }, a required { output_path }, and { format }. Supported formats: stl (binary STL mesh), step (BREP CAD interchange), dxf (planar laser/waterjet profile from a Region or planar face), 3mf (slicer-friendly mesh with per-part colors), glb (web-viewer / AR with PBR materials), svg-drawing (third-angle engineering-drawing sheet: front/","inputSchema":{"type":"object","required":["target"],"properties":{"code":{"type":"string"},"file":{"type":"string"},"part":{"type":"string"},"format":{"enum":["stl","step","dxf","3mf","glb","svg-drawing","urdf","srdf","sdf-gazebo","usd-isaac","bom-csv","bom-json"],"type":"string"},"target":{"enum":["model","part"],"type":"string"},"options":{"type":"object"},"no_verify":{"type":"boolean","default":false},"feature_id":{"type":"string"},"output_dir":{"type":"string"},"output_path":{"type":"string"}}},"title":"Export","logicalName":"export","displayName":"Export","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"lookup_cookbook","description":"Use this when you need a canonical pattern snippet for a CAD task. Search the kernelCAD cookbook for canonical pattern snippets. Returns top-k snippets matching the natural-language query, ranked by BM25 over title/tags/keywords/trigger. Use when you need a canonical pattern for fillet-after-subtract, non-overlapping booleans, sketch-to-extrude flows, etc. Returns empty if no snippet scores above the relevance floor — proceed without cookbook help in that case.","inputSchema":{"type":"object","required":["query"],"properties":{"k":{"type":"number","default":3},"query":{"type":"string"}}},"title":"Look Up Cookbook","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"lookup_cookbook","displayName":"Look Up Cookbook"},{"name":"find_part","description":"Use this when you need to find a part in the catalog. Discover bundled (and optionally remote) part-catalog records by fuzzy query and faceted filters. Tokens AND-combine; cross-facet filters AND-combine. Pass partsBaseUrl (or set KERNELCAD_PARTS_BASE_URL) to enable the remote tier; otherwise results are bundled-only.","inputSchema":{"type":"object","properties":{"tag":{"type":"string"},"limit":{"type":"number"},"query":{"type":"string"},"family":{"type":"string"},"source":{"enum":["local","remote","auto"],"type":"string"},"category":{"type":"string"},"standard":{"type":"string"},"partsBaseUrl":{"type":"string"}}},"title":"Find Part","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_part","displayName":"Find Part"},{"name":"fetch_part","description":"Use this when you need to download a catalog part as a STEP file. Resolve an id (or single-match query) to a part record and write its STEP file to the local cache. Bundled ids resolve offline; non-bundled ids require partsBaseUrl (or KERNELCAD_PARTS_BASE_URL). Returns the cache path plus a sha256 fingerprint.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"query":{"type":"string"},"family":{"type":"string"},"category":{"type":"string"},"standard":{"type":"string"},"partsBaseUrl":{"type":"string"}}},"title":"Fetch Part","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"fetch_part","displayName":"Fetch Part"},{"name":"solve_sketch","description":"Use this when you need to solve a 2D sketch constraint set. Solve a 2D sketch constraint set. Side-effect-free: pass { entities, constraints } and receive solved entities plus the original constraints. Entities are POINT, LINE, and CIRCLE records; constraints use the kernelCAD constraint vocabulary.","inputSchema":{"type":"object","required":["entities","constraints"],"properties":{"entities":{"type":"array","items":{"oneOf":[{"type":"object","required":["id","type","x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"id":{"type":"string"},"type":{"enum":["POINT"],"type":"string"},"fixed":{"type":"boolean"}}},{"type":"object","required":["id","type","p1","p2"],"properties":{"id":{"type":"string"},"p1":{"type":"string"},"p2":{"type":"string"},"type":{"enum":["LINE"],"type":"string"}}},{"type":"object","required":["id","type","center","radius"],"properties":{"id":{"type":"string"},"type":{"enum":["CIRCLE"],"type":"string"},"center":{"type":"string"},"radius":{"type":"number"}}}]}},"constraints":{"type":"array","items":{"type":"object","required":["id","type","entities"],"properties":{"id":{"type":"string"},"type":{"enum":["COINCIDENT","DISTANCE","HORIZONTAL","VERTICAL","PARALLEL","PERPENDICULAR","EQUAL_LENGTH","TANGENT","RADIUS","ANGLE","CONCENTRIC","SYMMETRIC"],"type":"string"},"value":{"type":"number"},"entities":{"type":"array","items":{"type":"string"}}}}}}},"title":"Solve Sketch","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"solve_sketch","displayName":"Solve Sketch"},{"name":"add_constraint","description":"Use this when you need to add a sketch constraint to a list. Append one validated sketch constraint to a constraint list. Side-effect-free: pass { constraints, constraint } and receive the updated list.","inputSchema":{"type":"object","required":["constraint"],"properties":{"constraint":{"type":"object","required":["id","type","entities"],"properties":{"id":{"type":"string"},"type":{"enum":["COINCIDENT","DISTANCE","HORIZONTAL","VERTICAL","PARALLEL","PERPENDICULAR","EQUAL_LENGTH","TANGENT","RADIUS","ANGLE","CONCENTRIC","SYMMETRIC"],"type":"string"},"value":{"type":"number"},"entities":{"type":"array","items":{"type":"string"}}}},"constraints":{"type":"array","items":{"type":"object","required":["id","type","entities"],"properties":{"id":{"type":"string"},"type":{"enum":["COINCIDENT","DISTANCE","HORIZONTAL","VERTICAL","PARALLEL","PERPENDICULAR","EQUAL_LENGTH","TANGENT","RADIUS","ANGLE","CONCENTRIC","SYMMETRIC"],"type":"string"},"value":{"type":"number"},"entities":{"type":"array","items":{"type":"string"}}}}}}},"title":"Add Constraint","logicalName":"add_constraint","displayName":"Add Constraint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_part","description":"Use this when you need to add a part to an assembly. Durably insert `const <binding> = <assembly>.part(partName, shapeExpression, opts?)` before the final top-level return in a kernelCAD source string. Returns modified source plus diagnostics from re-evaluating it. Side-effect-free: caller persists the returned source.","inputSchema":{"type":"object","required":["code","assembly_binding","part_name","shape_expression"],"properties":{"at":{"type":"array","items":{"type":"number"}},"code":{"type":"string"},"part_name":{"type":"string"},"binding_name":{"type":"string"},"assembly_binding":{"type":"string"},"shape_expression":{"type":"string"}}},"title":"Add Part","logicalName":"add_part","displayName":"Add Part","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_connector","description":"Use this when you need to add a mate connector to a part. Durably insert `<partBinding>.connector(name, { type, origin, axis?, normal? })` before the final top-level return. Use the part binding returned by add_part. Returns modified source plus diagnostics from re-evaluation. Side-effect-free.","inputSchema":{"type":"object","required":["code","part_binding","name","type","origin"],"properties":{"axis":{"type":"array","items":{"type":"number"}},"code":{"type":"string"},"name":{"type":"string"},"type":{"enum":["frame","axis","planar","ball"],"type":"string"},"normal":{"type":"array","items":{"type":"number"}},"origin":{"oneOf":[{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},{"type":"object","required":["kind","value"],"properties":{"kind":{"enum":["vec3"],"type":"string"},"value":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}},{"type":"object","required":["kind","query"],"properties":{"kind":{"enum":["topology"],"type":"string"},"query":{"type":"object","required":["kind","name"],"properties":{"kind":{"enum":["face-center","face-normal","vertex","edge-axis"],"type":"string"},"name":{"type":"string"}}}}}]},"part_binding":{"type":"string"}}},"title":"Add Connector","logicalName":"add_connector","displayName":"Add Connector","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_mate","description":"Use this when you need to author a mate-graph relationship into the source, selected by `relation` (default 'mate'):\n- 'mate' — a typed mate between two connectors ({ name, a, b, type, pose?, limitsDeg?, limitsMm? }).\n- 'coupling' — couple a driven mate to a source mate by ratio ({ driven, source, ratio, offset? }).\n- 'transmission' — a physical drive path across mates ({ name, kind, sourceMate, drivenMates, path, ... }).\nAll durably edit source and need { code, assembly_binding }. Params other","inputSchema":{"type":"object","allOf":[{"if":{"anyOf":[{"not":{"required":["relation"]}},{"required":["relation"],"properties":{"relation":{"const":"mate"}}}]},"then":{"required":["name","a","b","type"]}},{"if":{"required":["relation"],"properties":{"relation":{"const":"coupling"}}},"then":{"required":["driven","source","ratio"]}},{"if":{"required":["relation"],"properties":{"relation":{"const":"transmission"}}},"then":{"required":["name","kind","sourceMate","drivenMates","path"]}}],"required":["code","assembly_binding"],"properties":{"a":{"type":"string"},"b":{"type":"string"},"code":{"type":"string"},"kind":{"enum":["direct-horn","link-rod","four-bar","gear-pair","belt","tendon"],"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pose":{},"type":{"enum":["fastened","revolute","prismatic","cylindrical","planar","ball","pin_slot"],"type":"string"},"input":{"type":"string"},"notes":{"type":"string"},"ratio":{"type":"number"},"driven":{"type":"string"},"offset":{"type":"number"},"output":{"type":"string"},"source":{"type":"string"},"actuator":{"type":"string"},"limitsMm":{"type":"array","items":{"type":"number"}},"relation":{"enum":["mate","coupling","transmission"],"type":"string"},"limitsDeg":{"type":"array","items":{"type":"number"}},"sourceMate":{"type":"string"},"drivenMates":{"type":"array","items":{"type":"string"}},"assembly_binding":{"type":"string"}}},"title":"Add Mate","logicalName":"add_mate","displayName":"Add Mate","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_workspace_target","description":"Use this when you need to declare a reachability target for a connector. Durably insert `<assembly>.workspace(connectorRef, { reachable, toleranceMm? })` before the final top-level return. Workspace targets are checked by solvedModel validation/review pose-envelope gates. Returns modified source plus diagnostics from re-evaluation.","inputSchema":{"type":"object","required":["code","assembly_binding","connector_ref","reachable"],"properties":{"code":{"type":"string"},"reachable":{"type":"array","items":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}},"toleranceMm":{"type":"number"},"connector_ref":{"type":"string"},"assembly_binding":{"type":"string"}}},"title":"Add Workspace Target","logicalName":"add_workspace_target","displayName":"Add Workspace Target","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"set_scene_return","description":"Use this when you need to set how the script returns its assembly. Replace the final top-level return statement with `return <assembly>.model();` or `return <assembly>.solvedModel(poses, options?);`. Use solvedModel for mate-authored mechanisms so FK and validation run. Returns modified source plus diagnostics from re-evaluation.","inputSchema":{"type":"object","required":["code","assembly_binding","mode"],"properties":{"code":{"type":"string"},"mode":{"enum":["model","solvedModel"],"type":"string"},"poses":{"type":"object"},"options":{"type":"object"},"assembly_binding":{"type":"string"}}},"title":"Set Scene Return","logicalName":"set_scene_return","displayName":"Set Scene Return","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"solve_mates","description":"Use this when you need to solve the mate graph and get part poses. Run the v0.6 mate-graph solver on the active assembly. Returns { status, poses, iterations? } where each pose is a serialized Transform ({ translation, rotateAxis, rotateDeg }). Optional poses overrides mate pose values by mate name.","inputSchema":{"type":"object","properties":{"poses":{"type":"object"},"assembly":{"type":"string"}}},"title":"Solve Mates","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"solve_mates","displayName":"Solve Mates"},{"name":"review_cad","description":"Use this when you need to review a mechanism for fitness and repair mode. Run the deterministic CAD review loop: evaluate the script, validate the assembly/mate graph, check mate connectors touch modeled material, sample declared mate limits, optionally check interferences at sampled poses, report connector workspace bounds, and return a mechanism fitness verdict for agent self-review. Fitness includes repairMode: none, local-fix, parameter-tune, or topology-redesign.","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"assembly":{"type":"string"},"designGoal":{"type":"string"},"epsilonMm3":{"type":"number"},"combinatorial":{"type":"boolean"},"samplesPerMate":{"type":"integer","minimum":1},"gripperAperture":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"}}},"trackConnectors":{"type":"array","items":{"type":"string"}},"preserveInterfaces":{"type":"array","items":{"type":"string"}},"includeInterference":{"type":"boolean"},"includePoseEnvelope":{"type":"boolean"},"requirePhysicalUseCase":{"type":"boolean"},"includePhysicalUseCaseStatics":{"type":"boolean"},"includePhysicalUseCaseReachability":{"type":"boolean"},"includePhysicalUseCaseJointReactions":{"type":"boolean"},"includePhysicalUseCaseJointStructure":{"type":"boolean"},"physicalUseCaseReachabilitySamplesPerMate":{"type":"integer","minimum":1}}},"title":"Review CAD Model","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"review_cad","displayName":"Review CAD Model"},{"name":"design_loop","description":"Use this when you need to run a CAD design loop over multiple attempts. Run an agent CAD design loop over one or more attempt scripts: review each attempt with review_cad, continue past functional attempts that still have unresolved review warnings, return structured repair prompts, and optionally write a Studio-compatible build record JSON for visual replay.","inputSchema":{"type":"object","required":["goal","attempts"],"properties":{"goal":{"type":"string"},"assembly":{"type":"string"},"attempts":{"type":"array","items":{"type":"object","anyOf":[{"required":["file"]},{"required":["code"]}],"properties":{"id":{"type":"string"},"code":{"type":"string"},"file":{"type":"string"},"visualReview":{"type":"object","required":["accepted","findings"],"properties":{"checks":{"type":"array","items":{"type":"object","required":["code","passed","finding"],"properties":{"code":{"type":"string"},"passed":{"type":"boolean"},"finding":{"type":"string"},"screenshotPath":{"type":"string"}}}},"accepted":{"type":"boolean"},"findings":{"type":"array","items":{"type":"string"}},"screenshotPath":{"type":"string"}}}}}},"epsilonMm3":{"type":"number"},"stopOnPass":{"type":"boolean"},"recordTitle":{"type":"string"},"combinatorial":{"type":"boolean"},"samplesPerMate":{"type":"integer","minimum":1},"gripperAperture":{"type":"object"},"trackConnectors":{"type":"array","items":{"type":"string"}},"outputRecordPath":{"type":"string"},"preserveInterfaces":{"type":"array","items":{"type":"string"}},"allowReviewWarnings":{"type":"array","items":{"type":"string"}},"includeInterference":{"type":"boolean"},"includePoseEnvelope":{"type":"boolean"},"requireVisualReview":{"type":"boolean"},"requirePhysicalAcceptance":{"type":"boolean"}}},"title":"Run Design Loop","logicalName":"design_loop","displayName":"Run Design Loop","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"flatten_pattern","description":"Use this when you need the unfolded flat pattern of a bent sheet-metal part. Return the unfolded 2D flat-pattern of a bent sheet-metal Shape as a Region (outer polyline + holes + bend lines + sketch plane). Slice 1: at most 2 bends. Pass { file } or { code }; optional { featureId } to pick a specific Shape.","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"featureId":{"type":"string"}}},"title":"Flatten Sheet-Metal Pattern","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"flatten_pattern","displayName":"Flatten Sheet-Metal Pattern"},{"name":"evaluate_sdf","description":"Use this when you need to sample a signed-distance field at a point. Sample the signed distance from an in-script sdf.* field at a 3D point. Returns { distance, inside, aabb, kind }. Distance is in mm; negative = inside the surface, 0 = exactly on the surface, positive = outside. Use this to verify SDF composition before calling sdf.materialize (which is the expensive step). The script must bind the SdfField via sdf.bind('<name>', field) and pass that name as fieldName. Hint: pass either { file","inputSchema":{"type":"object","required":["fieldName","point"],"properties":{"code":{"type":"string"},"file":{"type":"string"},"point":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"fieldName":{"type":"string"}}},"title":"Evaluate SDF","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"evaluate_sdf","displayName":"Evaluate SDF"},{"name":"capture_animation","description":"Use this when you need to render a script's animation timeline to a video. Capture a kernelCAD script's animationView({...}) timeline to an MP4 (ffmpeg) or a PNG frame sequence, verifying the sampled poses for part interference. FILE ONLY: pass { file } (a .kcad.ts path) — there is no { code } mode, because the capture engine renders from a file on disk (its relative lib.fromSTEP imports resolve against the script directory). MP4 by default; pass { frames_dir } to write frame-0000.png... and ski","inputSchema":{"type":"object","required":["file"],"properties":{"fps":{"type":"number"},"file":{"type":"string"},"hide":{"type":"array","items":{"type":"string"}},"focus":{"type":"array","items":{"type":"string"}},"no_verify":{"type":"boolean","default":false},"frames_dir":{"type":"string"},"output_path":{"type":"string"},"verify_every":{"type":"integer","minimum":1}}},"title":"Capture Animation","logicalName":"capture_animation","displayName":"Capture Animation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"render_preview","description":"Use this when you need to LOOK at a kernelCAD model — render its script to deterministic PNG views for visual self-check (the visual half of the evaluate → render → inspect → fix loop), with NO studio or dev server required. Pass { code } (inline source) or { file } (a .kcad.ts path), exactly one. Renders the canonical engineering views (front, right, top, iso — pass { views } for a subset, e.g. [\"iso\"] for fastest iteration) plus an optional { pose: \"<az>,<el>\" } arbitrary camera angle (degrees","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"hide":{"type":"array","items":{"type":"string"}},"pose":{"type":"string"},"focus":{"type":"array","items":{"type":"string"}},"views":{"type":"array","items":{"enum":["front","right","top","iso"],"type":"string"}},"width":{"type":"integer","maximum":2048,"minimum":64},"height":{"type":"integer","maximum":2048,"minimum":64},"explode":{"type":"object","required":["factor"],"properties":{"mode":{"enum":["radial","mate-axis"],"type":"string"},"factor":{"type":"number","minimum":0}},"additionalProperties":false},"out_dir":{"type":"string"},"overlay":{"enum":["zebra","curvature","continuity"],"type":"string"},"section":{"type":"object","required":["axis","position"],"properties":{"axis":{"enum":["x","y","z"],"type":"string"},"flip":{"type":"boolean","default":false},"position":{"type":"number"}},"additionalProperties":false},"base_url":{"type":"string"},"environment":{"type":"string"},"no_watermark":{"type":"boolean","default":false},"no_mechanism_check":{"type":"boolean","default":false}}},"title":"Render Preview","logicalName":"render_preview","displayName":"Render Preview","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"resolve_assumptions","description":"Use this when you need to confirm or override the open facts in an assumption ledger from trace_from_image (missing scale, inferred/assumed values) before committing geometry built from a reference photo. Reads the persisted `<model>.ledger.json` at `ledgerPath`, applies each resolution — `{ id, confirm: true }` to accept a fact as-is, or `{ id, value }` to override it — rewrites the ledger file, and returns the updated ledger plus `paramOverrides` (factId -> value) to feed straight into `set_pa","inputSchema":{"type":"object","required":["ledgerPath","resolutions"],"properties":{"ledgerPath":{"type":"string"},"resolutions":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"value":{},"confirm":{"type":"boolean"}}}}}},"title":"Resolve Image Assumptions","logicalName":"resolve_assumptions","displayName":"Resolve Image Assumptions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"run_fea","description":"Use this when you need to know whether a part will hold a load. Runs the linear-static structural study a script declares with `shape.feaStudy({ material, fixed, loads, meshSize?, minSafetyFactor? })`: meshes the solid with quadratic tetrahedra, solves it with CalculiX, and returns evidence — peak von Mises stress (MPa), peak displacement (mm), the minimum safety factor against the material yield, per-region hot spots named by @kc[...] face ref, mesh-quality trust flags, an equilibrium residual,","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"study":{"type":"string"},"heatmaps":{"type":"boolean"},"mesh_size":{"type":"number"},"output_dir":{"type":"string"},"mesh_timeout_ms":{"type":"number"},"solve_timeout_ms":{"type":"number"}}},"title":"Run Structural FEA","logicalName":"run_fea","displayName":"Run Structural FEA","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"fea_summary","description":"Use this when you need a structural check's context without paying for a solve. Read-only: returns the stored summary of a previous run_fea (pass the same `output_dir`), whether the CalculiX + gmsh toolchain is available on this machine (with the install command when it is not), and the FEA material table with real E / Poisson / yield numbers so a grade is chosen against data rather than from memory. Never meshes, solves, or writes.","inputSchema":{"type":"object","properties":{"output_dir":{"type":"string"}}},"title":"Get FEA Summary","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"fea_summary","displayName":"Get FEA Summary"},{"name":"send_to_printer","description":"Use this when you need to upload a .gcode file (e.g. written by export with target: \"model\", format: \"gcode\") to a real network printer and, by default, start the print. protocol: 'octoprint' (POST /api/files/local with an X-Api-Key), 'moonraker' (Klipper's POST /server/files/upload), or 'bambu-lan' (Bambu Lab LAN-mode: FTPS implicit-TLS upload on port 990 as user 'bblp' with the printer's LAN access code, then an MQTT print-start command on port 8883 — requires access_code and, unless start_pri","inputSchema":{"type":"object","required":["gcode_path","protocol","host"],"properties":{"host":{"type":"string"},"port":{"type":"number"},"serial":{"type":"string"},"api_key":{"type":"string"},"dry_run":{"type":"boolean"},"filename":{"type":"string"},"protocol":{"enum":["octoprint","moonraker","bambu-lan"],"type":"string"},"gcode_path":{"type":"string"},"access_code":{"type":"string"},"start_print":{"type":"boolean"}}},"title":"Send G-code to Printer","logicalName":"send_to_printer","displayName":"Send G-code to Printer","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"repair_script","description":"Use this when evaluate_script reported an error and you want the fix applied rather than described. Takes the candidates why_did_this_fail derives for a diagnostic, applies them one at a time, re-evaluates after each, and keeps the first that clears the diagnostic without introducing new errors. Never edits outside the repair region (failing feature statement + its input statements + the param() lines it reads) — an out-of-region patch is refused with tool.repair.out-of-region. Returns the repai","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"strategy":{"enum":["apply-first","try-all","dry-run"],"type":"string"},"diagnostic":{"type":"string"},"max_attempts":{"type":"integer","maximum":10,"minimum":1}}},"title":"Repair CAD Script","logicalName":"repair_script","displayName":"Repair CAD Script","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sweep_tolerance","description":"Use this when you need to check whether a mechanism stays buildable across a tolerance/dimension range, not just at one nominal value. Declares one or more param() names with a { values: [...] } list or a { min, max, steps } range, re-evaluates the script once per cartesian-product combination (capped at 64 combos — exceeding it truncates to the first 64 and emits kinematic.sweep-tolerance.combo-cap-exceeded), and runs the standard gates on each combo: interference, mounting-hole diameter agreem","inputSchema":{"type":"object","required":["params"],"properties":{"code":{"type":"string"},"file":{"type":"string"},"gates":{"type":"object","properties":{"jointAxis":{"type":"boolean"},"reachable":{"type":"object","required":["tipLink","targetPosition"],"properties":{"tipLink":{"type":"string"},"targetPosition":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3},"targetOrientation":{"type":"array","items":{"type":"number"},"maxItems":3,"minItems":3}}},"interference":{"type":"boolean"},"mountingHoles":{"type":"boolean"}}},"params":{"type":"object"},"assembly":{"type":"string"}}},"title":"Sweep Tolerance Range","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"sweep_tolerance","displayName":"Sweep Tolerance Range"},{"name":"diff_geometry","description":"Use this when you need to know WHAT MATERIAL changed between two versions of a model, not just how much. The deeper sibling of diff_scripts: a volume delta alone is ambiguous (a boss that grew and a pocket that deepened report the same magnitude, and a part that only moved reports zero), so this tool answers it with geometry instead of pixels. Baseline is { baseFile } or { baseCode }; the revised side is either another script ({ file } or { code }) or the SAME script re-lowered with { params } o","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"file":{"type":"string"},"params":{"type":"object","additionalProperties":true},"render":{"type":"boolean"},"out_dir":{"type":"string"},"baseCode":{"type":"string"},"baseFile":{"type":"string"}}},"title":"Diff Model Geometry","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"diff_geometry","displayName":"Diff Model Geometry"},{"name":"drawing_to_cad","description":"Use this when the reference for a part is a 2D engineering drawing PDF (orthographic views with dimensions), not a photo. Deterministic, no vision model: reads the vector linework (stroke width, dash) and positioned text; classifies visible / hidden / center / dimension / extension lines; reads the title block scale, units and projection symbol; identifies front / top / side views by projection alignment (third- or first-angle); ties dimension text to its lines (⌀, R, 4×, ±, THRU, depth). Dimens","inputSchema":{"type":"object","properties":{"out":{"type":"string"},"page":{"type":"integer","minimum":1},"path":{"type":"string"},"verify":{"type":"boolean"},"pdfBase64":{"type":"string"},"projection":{"enum":["third-angle","first-angle"],"type":"string"}}},"title":"Convert Drawing to CAD","logicalName":"drawing_to_cad","displayName":"Convert Drawing to CAD","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"mesh_to_features","description":"Use this when you are handed an STL, OBJ or 3MF of a mostly prismatic mechanical part (plate, bracket, spacer, flange, housing block) and need an EDITABLE kernelCAD model of it rather than a faceted lib.fromSTL import. Deterministic, measured, self-verifying: it welds and checks the mesh, segments planes and cylinders, picks the extrusion axis, slices each band and fits exact lines / arcs / circles, snaps near-round values (each snap recorded), then emits a readable .kcad.ts with named param()s","inputSchema":{"type":"object","properties":{"out":{"type":"string"},"data":{"type":"string"},"file":{"type":"string"},"format":{"enum":["stl","obj","3mf"],"type":"string"},"minIoU":{"type":"number"},"maxPasses":{"type":"number"},"maxTriangles":{"type":"number"},"maxDeviationMm":{"type":"number"},"weldToleranceMm":{"type":"number"}}},"title":"Fit Features to Mesh","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"mesh_to_features","displayName":"Fit Features to Mesh"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=kernelCAD-from-words-to-manufacturable-geometry&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3Aua2VybmVsY2FkLmNvbS9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22kernelCAD-from-words-to-manufacturable-geometry%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.kernelcad.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22kernelCAD-from-words-to-manufacturable-geometry%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.kernelcad.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=kernelCAD+%E2%80%94+from+words+to+manufacturable+geometry&connectorUrl=https%3A%2F%2Fmcp.kernelcad.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"kernelCAD-from-words-to-manufacturable-geometry\" --url \"https://mcp.kernelcad.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/kernelcad-mcp-d51c6f665f","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/kernelcad-mcp-d51c6f665f/tools/{tool}","mcpServerUrl":"https://mcp.kernelcad.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/kernelcad-mcp-d51c6f665f?live=1"}