kernelcad
Server Details
Agent-first CAD: editable .kcad.ts source, deterministic review, OpenCASCADE kernel.
- Status
- Unhealthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- w1ne/kernelCAD-web
- GitHub Stars
- 2
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 42 of 42 tools scored. Lowest: 3.2/5.
Each of the 42 tools has a clearly distinct purpose, with detailed descriptions that prevent confusion. Even the many 'add_' tools target different aspects (connectors, constraints, curves, etc.), and specialized tools like 'evaluate_sdf' and 'capture_animation' are unambiguous.
The vast majority of tools follow a verb_noun snake_case pattern (e.g., add_connector, evaluate_script). A few exceptions like 'why_did_this_fail' and 'set_scene_return' break the pattern slightly, but overall consistency is strong.
42 tools is well above the recommended 3-15 range, and even exceeds the 25+ threshold for 'too many'. While the CAD domain is broad, many tools could be consolidated or are specialized, making the set feel heavy for typical use.
The tool set covers the full lifecycle of CAD design: creation (add_*, export), inspection (inspect, query), modification (remove_feature, set_param), simulation (solve_mates, verify), and validation (review_cad). There are no obvious gaps for the intended domain.
Available Tools
42 toolsadd_connectorAdd ConnectorAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | Optional [x, y, z] axis. | |
| code | Yes | The .kcad.ts source code. | |
| name | Yes | Connector name unique within the part. | |
| type | Yes | ||
| normal | No | Optional [x, y, z] normal. | |
| origin | Yes | Origin as [x, y, z] shorthand or structured ConnectorOrigin. | |
| part_binding | Yes | JS identifier bound to an AssemblyPartRef, e.g. "basePart". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description declares 'Side-effect-free' and explains the return value ('Returns modified source plus diagnostics'), which matches the annotation destructiveHint=false. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear sentences and a code snippet; every part is essential and front-loaded with the purpose. No unnecessary words.
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 7 parameters and no output schema, the description adequately covers usage, side effects, and return value. It could mention constraints like unique name within part, but overall sufficient.
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?
With 86% schema coverage, the description adds value by showing the exact code template for using parameters like part_binding, name, type, origin, and optional axis/normal, going beyond schema 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 states the specific action 'add a mate connector to a part' and provides a code template, clearly distinguishing it from other sibling tools like add_feature or add_constraint.
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 initial sentence explicitly says 'Use this when you need to add a mate connector to a part.' It provides clear context, though it does not mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_constraintAdd ConstraintAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| constraint | Yes | ||
| constraints | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly states 'Side-effect-free' and describes the input/output pattern, which adds value beyond annotations. Annotations already indicate non-destructive and non-read-only, but the description clarifies the safe, pure function behavior.
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?
Exceptionally concise with two sentences that front-load the purpose and provide essential guidance. Every sentence adds value without redundancy.
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?
Covers the basic flow (input list, constraint, output list) but lacks details on return format and constraint validation, which are important given no output schema and nested objects.
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?
With 0% schema coverage, the description compensates by explaining the role of 'constraint' and 'constraints' in appending. However, it does not detail the structure of the constraint object, leaving some ambiguity.
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?
Clearly states the verb 'add' and resource 'sketch constraint to a list', distinguishing it from general add tools. However, it does not explicitly differentiate from sibling add tools like add_connector or add_mate, which also add constraints.
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 a clear condition ('when you need to add a sketch constraint to a list') but lacks explicit when-not-to-use guidance or alternatives, such as when to use add_connector instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_curveAdd CurveAInspect
Use this when you need to author a 3D Curve3D into the user's .kcad.ts immediately before the last top-level return. One authoring path, selected by kind:
'nurbs' — insert a
nurbsCurve(controlPoints, opts?)declaration. PasscontrolPointsas a Vec3[] (mm, at least 2 points). Optional NURBS knobs:degree(default 3), rationalweights, explicitknots,closed.'hermite' — insert a
hermiteG2(a, b)declaration: a quintic Hermite curve interpolating two endpoints with matching positions, tangents, and (optional) curvatures — bridges two curves with G2 continuity. Each endpoint is{ point: Vec3, tangent: Vec3, curvature?: Vec3 }in mm; tangent magnitude ~ chord length; curvature defaults to [0,0,0] (G1-only). The returned binding has type Curve3D (peer to Shape / Surface) — consume it viaadd_variable_sweep(spine input),add_surface({ kind: 'boundary' })(boundary curve), or downstream Curve3D-accepting features. Returns the modified code + diagnostics from re-evaluating. Side-effect-free. Each kind fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | kind:'hermite' — start endpoint. | |
| b | No | kind:'hermite' — end endpoint. | |
| code | Yes | The .kcad.ts source code. | |
| kind | Yes | Which curve-construction path to use. | |
| knots | No | kind:'nurbs' — optional explicit knot vector; missing => clamped-uniform inferred. | |
| closed | No | kind:'nurbs' — optional periodic/closed-curve flag. | |
| degree | No | kind:'nurbs' — curve degree; default 3 (cubic). | |
| weights | No | kind:'nurbs' — optional rational weights, one per control point (same length as controlPoints). | |
| binding_name | No | JS const name for the new Curve3D binding (default: _curve_<N>). | |
| controlPoints | No | kind:'nurbs' — control points as Vec3 triples in mm; at least 2 entries. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, and the description confirms 'Side-effect-free.' It explains behavior for each kind, including defaults and that each kind fails closed on missing required params. This adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy due to the complexity of two authoring paths, but it is well-structured with bullet points and front-loaded with the main purpose. Minor redundancy could be trimmed.
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 complexity (10 parameters, nested objects, two distinct paths), the description covers purpose, usage, parameter details, return value, side-effects, and downstream consumption. No output schema, but the description explains the return. Complete for effective use.
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%, but the description adds significant meaning: it explains the purpose of each kind, the structure of hermite endpoints, default degree, and how parameters relate to the two paths. This goes beyond the schema 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 clearly states 'Use this when you need to author a 3D Curve3D' and explains two distinct authoring paths (nurbs and hermite). It distinguishes from sibling tools like add_variable_sweep and add_surface by specifying that the returned Curve3D is consumed by them.
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 when to use the tool ('Use this when you need to author a 3D Curve3D') and mentions how the result is consumed by other tools. It does not explicitly list when not to use it, but the context is clear. Slight lack of direct comparison to siblings like project_curve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_featureAdd FeatureAInspect
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 schema.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| feature_code | Yes | Single-statement source line to insert (e.g. `const hole = cylinder(5, 2).translate(10, 10, -1);`). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Side-effect-free' and 'Returns the modified code as text plus diagnostics', providing behavioral context beyond annotations (which already show readOnlyHint=false and destructiveHint=false). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized with two main sentences, front-loading the purpose. The third sentence about faceLabels is useful but slightly lengthy. Overall efficient with no wasted words.
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 2 parameters, no output schema, and basic annotations, the description is fairly complete: it explains the action, behavior, return value, and includes a tip. Sufficient for its simplicity.
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%, but the description adds value by specifying feature_code as 'single-statement source line', giving an example, and mentioning faceLabels usage. This clarifies parameter semantics 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 the verb 'insert' and the resource 'feature line into a script', specifying insertion before the last return statement. It is clear but does not explicitly differentiate from sibling tools like add_connector or add_constraint.
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 says 'Use this when you need to insert a new feature line into a script', providing a clear when-to-use. However, it lacks explicit when-not-to-use or alternatives, despite having 37 sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_mateAdd MateAInspect
Use this when you need to author a mate-graph relationship into the source, selected by relation (default 'mate'):
'mate' — a typed mate between two connectors ({ name, a, b, type, pose?, limitsDeg?, limitsMm? }).
'coupling' — couple a driven mate to a source mate by ratio ({ driven, source, ratio, offset? }).
'transmission' — a physical drive path across mates ({ name, kind, sourceMate, drivenMates, path, ... }). All durably edit source and need { code, assembly_binding }. Params other than
relationare forwarded verbatim; each relation fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | relation:'mate' — connector ref "<partName>.<connectorName>". | |
| b | No | relation:'mate' — connector ref "<partName>.<connectorName>". | |
| code | Yes | The .kcad.ts source code. | |
| kind | No | relation:'transmission' — transmission kind. | |
| name | No | relation:'mate'|'transmission' — name unique within the assembly. | |
| path | No | relation:'transmission' — drive path. | |
| pose | No | relation:'mate' — optional mate pose. | |
| type | No | relation:'mate' — mate type. | |
| input | No | relation:'transmission' — optional input. | |
| notes | No | relation:'transmission' — optional notes. | |
| ratio | No | relation:'coupling' — driven pose = source pose * ratio + offset. | |
| driven | No | relation:'coupling' — driven mate name. | |
| offset | No | relation:'coupling' — optional pose offset. | |
| output | No | relation:'transmission' — optional output. | |
| source | No | relation:'coupling' — source mate name. | |
| actuator | No | relation:'transmission' — optional actuator. | |
| limitsMm | No | relation:'mate' — optional [minMm, maxMm]. | |
| relation | No | Which relationship to author (default 'mate'). | |
| limitsDeg | No | relation:'mate' — optional [minDeg, maxDeg]. | |
| sourceMate | No | relation:'transmission' — source mate name. | |
| drivenMates | No | relation:'transmission' — driven mate names. | |
| assembly_binding | Yes | JS identifier bound to assembly(...). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds behavioral details: 'All durably edit source', 'each relation fails closed on its own missing required params', and the forwarding of parameters. This context aids the agent in understanding side effects.
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 purpose and uses a bullet list for relation types, making it scannable. However, it could be more concise by condensing the inline parameter structure definitions.
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 complexity (22 parameters, 3 relation types) and no output schema, the description covers the main behaviors and required parameters per relation. It lacks information about return values or confirmation, but remains fairly 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?
Schema coverage is 100%, so baseline is 3. The description groups parameters by relation type, explains the default 'relation' parameter, and highlights that parameters are forwarded verbatim. This adds meaningful context beyond the schema 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 clearly states the tool authors a 'mate-graph relationship' and lists three specific relation types ('mate', 'coupling', 'transmission') with their purposes. This distinguishes it from siblings like 'add_connector' or 'add_constraint'.
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 says 'Use this when you need to author a mate-graph relationship', but it does not explicitly guide when not to use it or provide alternatives among siblings. While the context implies it is for mechanical relationships, there is no clear exclusion or comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_partAdd PartAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional [x, y, z] assembly placement. | |
| code | Yes | The .kcad.ts source code. | |
| part_name | Yes | Assembly-unique part name. | |
| binding_name | No | Optional JS const name for the returned AssemblyPartRef. Defaults to a part-name-derived identifier. | |
| assembly_binding | Yes | JS identifier bound to assembly(...), e.g. "arm". | |
| shape_expression | Yes | JS expression for the Shape to pass to assembly.part, inserted verbatim. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral traits beyond annotations: it notes that the tool is 'side-effect-free' and that the caller persists the returned source. It also explains the return value (modified source plus diagnostics). Annotations only provide non-read-only and non-destructive hints.
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 at three sentences, front-loads the purpose, and each sentence provides essential information without 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's complexity (6 params, no output schema), the description covers the core functionality and return values. It could elaborate on the diagnostics format, but it is sufficiently complete for an AI agent to use 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?
With 100% schema coverage, the baseline is 3. The description adds value by explaining how parameters are used together in the code insertion pattern (e.g., 'const <binding> = <assembly>.part(partName, shapeExpression, opts?)'), and clarifies the optional parameters like 'binding_name'.
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: 'Use this when you need to add a part to an assembly.' It specifies the exact code insertion pattern and distinguishes from sibling 'add_' tools by targeting a different entity.
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 clear context for when to use the tool ('when you need to add a part to an assembly') and specifies the insertion point ('before the final top-level return'). However, it does not explicitly exclude alternative tools or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_path_segmentAdd Path SegmentAInspect
Use this when you need to append a curved segment to an existing PathBuilder chain on the named chain_anchor variable. The call is injected at the END of the chain, immediately before any .close(). One segment kind, selected by kind:
'spline' —
.spline(points, opts?): interpolates through everypointswaypoint (Vec2[] mm, >= 2 entries; points[0] must match current pen position). Optionaltension, andstartTangent/endTangent2D direction vectors that constrain the first-derivative direction at the endpoints (magnitude normalised internally). Use for organic 2D outlines (eyewear brow, ergonomic handle, sneaker midsole).'nurbs' —
.nurbsSegment(controlPoints, opts?): explicit B-spline net (Vec2[] mm, >= degree+1 entries; controlPoints[0] must match pen; pen ends at controlPoints[N-1]). Optionaldegree(default 3), rationalweights(strictly positive), explicitknots(length = controlPoints.length + degree + 1).'hermite' —
.hermiteG2(a, b): each endpoint{ point: Vec2, tangent: Vec2, curvature?: Vec2 }in mm (a.point must match pen; pen ends at b.point).curvaturedefaults to [0,0] (G1); pass matching curvatures for G2 blends. Tangent magnitude is the first derivative (~ chord length), NOT unit length. Returns the modified code + diagnostics from re-evaluating. Side-effect-free. Each kind fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | kind:'hermite' — start endpoint; point must match current pen position within 1e-6 mm. | |
| b | No | kind:'hermite' — end endpoint. | |
| code | Yes | The .kcad.ts source code. | |
| kind | Yes | Which path-segment kind to append. | |
| knots | No | kind:'nurbs' — optional explicit knot vector; length must equal controlPoints.length + degree + 1. | |
| degree | No | kind:'nurbs' — B-spline degree (default 3). | |
| points | No | kind:'spline' — waypoints as Vec2 pairs in mm; at least 2 entries; first must match current pen position. | |
| tension | No | kind:'spline' — optional Catmull-Rom-style stiffness; forwarded to the underlying B-spline approximation. | |
| weights | No | kind:'nurbs' — optional rational weights (one per control point; strictly positive). | |
| endTangent | No | kind:'spline' — optional [x, y] direction vector at points[N-1]. Magnitude is normalised internally; direction matters. | |
| binding_name | No | Reserved for future use; the segment injection mutates the chain anchor in place. | |
| chain_anchor | Yes | JS identifier of an existing PathBuilder binding (e.g. `const brow = path().moveTo(0,0)`). | |
| startTangent | No | kind:'spline' — optional [x, y] direction vector at points[0]. Magnitude is normalised internally; direction matters. | |
| controlPoints | No | kind:'nurbs' — control-net vertices as Vec2 pairs in mm; at least degree+1 entries. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states behavioral traits: the call is injected at the END of the chain before any '.close()', it is side-effect-free, returns modified code and diagnostics, and each kind fails closed on missing required params. Annotations provide readOnlyHint=false and destructiveHint=false, which the description reinforces without contradiction, adding further context about the nature of the mutation.
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 clear lead sentence followed by bullet points for each segment kind. Every sentence adds essential information; there is no fluff. The front-loaded purpose and organized details make it easy to scan and understand.
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 (14 parameters, nested objects, no output schema), the description covers all necessary contextual elements: the overall purpose, how segments are appended, return value ('modified code + diagnostics'), side-effect safety, and constraints for each kind. No missing aspects for an AI agent to use it 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 significant value beyond the schema by explaining the workflow, the position of injection, constraints like points[0] must match pen position, and semantics of optional parameters like tension and tangents. This enrichment justifies a score above baseline, though some details are already in schema 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 clearly states the action ('append a curved segment to an existing PathBuilder chain') and the specific resource ('named chain_anchor variable'). It details three segment kinds, each with distinct usage, which implicitly distinguishes it from sibling tools like 'add_curve' that may have a different scope. The verb-resource combination is precise and 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 begins with 'Use this when you need to append a curved segment...', providing clear context for when to invoke the tool. However, it does not explicitly mention when not to use it or list alternative tools, so it misses the full 'when-not/alternatives' requirement for a 5. Nonetheless, the context is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_pattern_featureAdd Pattern FeatureAInspect
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 implemented as cumulative boolean union of transformed source copies — additive features (boxes, ribs, fins, spokes) pattern cleanly; patterning a subtractive feature (hole, cutout) only preserves the per-instance void when adjacent bodies are disjoint.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| grid | No | Required when kind=grid. | |
| kind | Yes | ||
| linear | No | Required when kind=linear. | |
| target | Yes | Variable name of the Shape to pattern (inserted verbatim as the LHS receiver). | |
| circular | No | Required when kind=circular. | |
| assign_to | No | Optional const-binding name; emits `const <assign_to> = <target>.patternX(...);`. Omit for statement form. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by stating 'Side-effect-free' and explaining the geometric behavior (cumulative boolean union, additive vs subtractive features). This complements the annotation destructiveHint=false and readOnlyHint=false.
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 a single paragraph that front-loads the purpose, but includes some technical detail (e.g., face refs, geometric note) that could be condensed. It is adequate but not optimally concise.
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 parameters, nested objects, no output schema), the description covers key aspects: usage, return value (modified code + diagnostics), side-effects, and pattern behavior. It lacks details on error cases or prerequisites, but overall is fairly 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?
Schema coverage is high (86%), so the schema already documents most parameters. The description adds high-level guidance ('Pass structured args (kind + the matching spec object)') and explains 'target' as the variable name, but does not substantially enhance individual parameter semantics 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 the tool's purpose: 'Use this when you need to repeat a feature in a pattern.' It specifies that it inserts a pattern call (Shape.patternLinear/.patternCircular/.patternGrid) into a script, which differentiates it from sibling tools like add_feature or flatten_pattern.
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 context on when to use the tool ('when you need to repeat a feature in a pattern') and how it modifies the script ('before the last top-level return'). However, it does not explicitly mention when not to use it or provide alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_surfaceAdd SurfaceAInspect
Use this when you need to author a NURBS Surface into the user's .kcad.ts. One authoring path, selected by kind:
'nurbs' — insert a nurbsSurface(...) / surfaceFromCurves(...) call. Pass either { controls, degree, weights?, knots?, periodic? } for direct construction, OR { section_sketch_ids } for skinning. Slice-1 limitation: weights are accepted but currently ignored (TColStd_Array2OfReal not exposed in WASM bindings); surfaces are non-rational.
'boundary' — insert a surfaceFromBoundary([c1,c2,c3,c4], opts?) call: one NURBS face through 4 boundary Curve3D refs (bottom, right, top, left in loop order; adjacent endpoints must coincide within 1e-6 mm) via OCCT BRepOffsetAPI_MakeFilling. The returned Surface produces no Shape until you chain .thicken(t) or .toShape() (do that via add_feature on the binding name). Returns the modified code + diagnostics. Each kind fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Current .kcad.ts source. | |
| kind | Yes | Which surface-construction path to use. | |
| knots | No | kind:'nurbs' — optional explicit knot vectors; missing => clamped uniform inferred. | |
| degree | No | kind:'nurbs' — degrees in U and V; each in [1, nU-1] / [1, nV-1]. | |
| weights | No | kind:'nurbs' — optional rational weights, same grid shape as controls. Ignored in slice-1. | |
| controls | No | kind:'nurbs' — control-point grid for direct construction (controls[u][v] = [x, y, z], mm). | |
| periodic | No | kind:'nurbs' — optional periodic flags per parametric direction. | |
| sampling | No | kind:'boundary' — OCCT NbPtsOnCur sampling parameter (default 15). | |
| continuity | No | kind:'boundary' — continuity grade applied to every edge ('C0' | 'C1' | 'C2'), or an array of 4 grades (one per edge). Default 'C0'. | |
| binding_name | No | JS const name for the new Surface binding (kind:'nurbs' default surface_<N>; kind:'boundary' default _surface_<N>). | |
| curve_bindings | No | kind:'boundary' — tuple of 4 existing Curve3D variable names (bottom, right, top, left) declared earlier in the source. | |
| section_sketch_ids | No | kind:'nurbs' — existing sketch FeatureIds (2 or more) to skin a surface through, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, meaning the tool modifies state but is not destructive. The description adds important behavioral context: the tool returns modified code and diagnostics, the Surface produces no Shape until chained, and for the 'nurbs' kind, weights are ignored in the current slice-1 build. This goes beyond the annotations and provides useful operational knowledge.
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 fairly long but well-structured, using bullet-like formatting to separate the two paths. Every sentence contributes useful information (parameters, limitations, return behavior). It could be slightly more concise, but it is not wasteful. The front-loaded purpose sentence is effective.
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 (12 parameters, two distinct modes, nested objects, no output schema), the description is remarkably complete. It explains the return value (modified code + diagnostics), the required follow-up step via add_feature, the limitation about weights, and defaults for optional parameters. No important aspect is left unaddressed.
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, but the description still adds significant meaning: it explains the two construction paths (direct vs. skinning, boundary vs. nurbs), defaults for knots and continuity, and the requirement for 4 curve bindings in boundary mode. It clarifies that 'controls' supplies a grid for direct construction while 'section_sketch_ids' is for skinning. This is far beyond the schema descriptions alone.
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: 'author a NURBS Surface into the user's .kcad.ts'. It specifies two concrete paths (nurbs and boundary) and their input options, making the action very specific. The sibling list contains no other surface-creation tool, so differentiation is inherent.
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 explains when to use this tool (to author a NURBS surface) and briefly mentions that the resulting Surface requires further chaining with .thicken or .toShape via add_feature. However, it does not explicitly state when not to use it, nor does it compare with alternatives like direct code editing or other tools. The guidance is present but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_textAdd TextAInspect
Use this when you need to author text into a kernelCAD script before the last top-level return. One authoring path, selected by mode:
'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.
'emboss' — insert a
<shape>.embossText({...})chained call onto an existing Shapetarget. Use for engraved brand text on faces (Ray-Ban temple, CE mark, model number).depth > 0raises text out of the face;depth < 0engraves text into the face. Lowers via replicad drawText → sketchOnFace → extrude → fuse|cut. Default font is the runtime-bundled Liberation Sans. Side-effect-free; returns the modified code plus diagnostics from re-evaluating. Each mode fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| face | No | mode:'emboss' — target face — canonical name ('top'/'bottom'/'left'/'right'/'front'/'back') or label. | |
| font | No | mode:'sketch' — optional logical font name or .ttf file path; defaults to bundled Liberation Sans. | |
| mode | Yes | Which text-authoring path to use. | |
| size | No | mode:'sketch'|'emboss' — glyph cap height in mm (positive finite). | |
| align | No | mode:'sketch' — horizontal alignment relative to position (default left); mode:'emboss' — relative to the UV anchor (default center). | |
| depth | No | mode:'emboss' — signed extrusion depth in mm: positive emboss out, negative engrave in. Must be non-zero. | |
| bindAs | No | mode:'sketch' — emits `const <bindAs> = sketch.text(...)`; mode:'emboss' — emits `const <bindAs> = <target>.embossText(...);`. | |
| target | No | mode:'emboss' — variable name of the Shape to chain onto (inserted verbatim). | |
| anchorU | No | mode:'emboss' — U anchor in [0, 1] face-local (0=umin, 0.5=centre, 1=umax). Default 0.5. | |
| anchorV | No | mode:'emboss' — V anchor in [0, 1] face-local. Default 0.5. | |
| content | No | mode:'sketch' — text content (UTF-8, non-empty, non-whitespace). | |
| position | No | mode:'sketch' — [x, y] anchor in mm. Default [0, 0]. | |
| rotation | No | mode:'sketch' — CCW rotation in degrees around position (default 0); mode:'emboss' — CCW rotation in the face tangent plane (default 0). | |
| scaleMode | No | mode:'emboss' — Drawing.sketchOnFace scaling mode. Default original. | |
| fontFamily | No | mode:'emboss' — optional logical font name or .ttf file path; defaults to bundled Liberation Sans. | |
| textContent | No | mode:'emboss' — text content (UTF-8, non-empty, non-whitespace). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: side-effect-free, returns modified code plus diagnostics, fails closed on missing params, default font, and emboss depth behavior. 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 concise with 3-4 sentences, front-loads the primary use case, and explains modes and key behaviors efficiently. No redundant information.
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?
Despite no output schema, the description covers purpose, both modes, parameter behavior, side effects, and fallback behavior. It is complete for a complex tool with 17 parameters.
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%, but the description adds meaningful context (e.g., chainability for sketch, depth direction for emboss, default values for anchor and font). This goes beyond the schema 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 clearly states the tool is for authoring text into a kernelCAD script, with two distinct modes (sketch and emboss). It distinguishes from sibling tools that handle other design elements like curves, features, etc.
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 clear guidance on when to use each mode (sketch for chainable sketch.text, emboss for engraved/raised text on faces) with concrete examples. It does not explicitly exclude other usage, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_variable_sweepAdd Variable SweepAInspect
Use this when you need to author 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 source; each sections[i].profile_binding references an existing Sketch. Sections must be strictly increasing in t and span [0, 1]; first t=0, last t=1. Orientation is not exposed by this MCP tool until runtime orientation support is wired. Validates every binding exists in the source via regex before inserting (fast structured error vs capture-time stack). Returns the modified code + diagnostics. Side-effect-free.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| closed | No | Optional closed-sweep flag. | |
| sections | Yes | Varying cross-sections along the spine; at least 2 entries, strictly increasing in `t`, first t=0, last t=1. | |
| continuity | No | Inter-section continuity; default 'C1'. | |
| binding_name | No | JS const name for the new Shape binding (default: _sweep_<N>). | |
| spine_binding | Yes | Existing variable name for a Curve3D / Sketch / Vec3[] declared earlier in the source. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by detailing the side-effect-free insertion into source code, validation method (regex), and return value (modified code + diagnostics). It also mentions limitations (no orientation support), which adds transparency not covered by 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 concise (6 sentences), front-loaded with the primary use case, and 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?
For a tool with no output schema, the description adequately covers the insertion action, validation, and return value (modified code + diagnostics). It could mention more about the return format or error cases, but given the complexity and sibling context, it 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?
With 100% schema coverage, the baseline is 3. The description adds significant context: it explains that spine_binding references existing Curve3D/Sketch/Vec3[], sections profile_binding references existing Sketch, and reinforces constraints on t values and section ordering. This exceeds the structural 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 explicitly states the tool's purpose: 'Use this when you need to author a variable-section sweep along a spine.' It clearly distinguishes from sibling tools like add_curve or add_path_segment by specifying the variable sweep operation and mentions the resulting Shape type.
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 clear when-to-use guidance ('author a variable-section sweep'), constraints (sections must be strictly increasing t, span [0,1]), and what not to expect ('Orientation is not exposed'). It also suggests chaining via add_feature, providing a usage pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_workspace_targetAdd Workspace TargetAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| reachable | Yes | World-frame Vec3 targets the connector must be able to reach. | |
| toleranceMm | No | Optional non-negative tolerance in mm. | |
| connector_ref | Yes | Connector ref "<partName>.<connectorName>". | |
| assembly_binding | Yes | JS identifier bound to assembly(...). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description goes beyond annotations by specifying 'durably insert' (mutation), 'modifies source', returns modified source plus diagnostics, and mentions verification by validation/review gates. No contradiction with readOnlyHint=false and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, no redundancy. Every sentence adds necessary information.
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?
Provides all needed context: when to use, what it inserts, effect on validation, and return value (modified source + diagnostics). No output schema, but return is described.
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%, baseline 3. Description adds value by showing the call syntax `<assembly>.workspace(connectorRef, { reachable, toleranceMm? })`, clarifying parameter relationships beyond schema 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 clearly states the tool declares a reachability target for a connector and inserts a workspace() call. It is specific but does not explicitly differentiate from sibling tools like add_constraint, though the unique purpose is evident.
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?
Explicitly says 'Use this when you need to declare a reachability target for a connector.' Provides clear context but lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_animationCapture AnimationAInspect
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 skip ffmpeg entirely (mutually exclusive with output_path). Animation-pose interference verification runs by default (keyframe times + segment midpoints) BEFORE any browser/ffmpeg cost; { no_verify: true } skips it and { verify_every: n } additionally samples every n-th frame time. Pass { focus } or { hide } (arrays of feature ids or assembly part names, mutually exclusive) to isolate parts in the rendered frames — same semantics as kernelcad render --focus/--hide; visibility is render-only and does NOT affect the pose verification. Collisions DO NOT fail the call — the artifact is still written as evidence with ok: true; read verified: false + the collisions[] array. ENVIRONMENT REQUIREMENT (identical to kernelcad render): capture drives a headless browser against a running studio dev server reachable at http://localhost:5173 (or the VITE_PORT override); there is no bundled-static serving mode yet, so the same dev-server precondition applies in a production MCP install. Returns { ok, output_path, frame_count, duration_ms, fps, verified, verify_skipped?, collisions: [{ t_ms, a, b, volume_mm3 }], diagnostics }.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Override the animationView record's fps. | |
| file | Yes | Path to a .kcad.ts script with an animationView({...}) record. Required (no inline { code } mode). | |
| hide | No | Hide matching feature ids / assembly part names in the rendered frames. Mutually exclusive with focus. Render-only; does not affect pose verification. | |
| focus | No | Show only matching feature ids / assembly part names in the rendered frames. Mutually exclusive with hide. Render-only; does not affect pose verification. | |
| no_verify | No | Skip the animation-pose interference verification (default: verify on). | |
| frames_dir | No | PNG-sequence mode directory: write frame-0000.png... and skip ffmpeg. Mutually exclusive with output_path. | |
| output_path | No | MP4 output path; default <scriptDir>/<basename>-animation.mp4. Mutually exclusive with frames_dir. | |
| verify_every | No | Additionally verify at every n-th frame time of the fps schedule (unioned with the keyframe sample set). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses extensive behavior beyond annotations: no code mode, interference verification runs by default, collisions don't fail call, environment requirement, and mutually exclusive parameters. It adds significant value over annotations (readOnlyHint=false, destructiveHint=false). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence adds value. It is front-loaded with the main purpose. Could be slightly more concise, but not overly verbose given the 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 (8 params, no output schema). The description covers all aspects: usage, behavior (verification, collision handling), output format, environment requirements, and return fields. It is comprehensive without gaps.
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 descriptions. The description adds extra context: e.g., for 'file' it emphasizes no inline mode, for 'focus'/'hide' it clarifies render-only and no effect on verification, and explains mutual exclusivity of 'frames_dir' and 'output_path'. This goes beyond schema basics.
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: 'render a script's animation timeline to a video'. It specifies the verb (capture/render), resource (animation timeline), and output formats (MP4 or PNG). This is distinct from sibling tools like evaluate_script or add_connector.
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 clear usage context: 'Use this when you need to render a script's animation timeline to a video.' It explains file-only mode, environment requirements, and default behavior. However, it does not explicitly state when NOT to use or compare to alternatives, though the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_loopRun Design LoopAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Original user design goal. Fed into every review_cad repair prompt. | |
| assembly | No | ||
| attempts | Yes | Ordered design attempts. Each item is { id?, title?, file? or code?, visualReview? }. File attempts can be replayed by Studio build records. | |
| epsilonMm3 | No | Forwarded to review_cad. | |
| stopOnPass | No | Stop after the first attempt that is functional and passes the quality gate. Default true. | |
| recordTitle | No | Optional title for the build record. | |
| combinatorial | No | Sample all 2^N limit-corner combinations across mates with declared limits. Capped at 8 mates with limits; combine with samplesPerMate for both interior coverage and worst-pose detection. Default false. | |
| samplesPerMate | No | Pose-envelope samples per declared-limit mate. 1 (default) = corners only; >=3 adds uniform interior points between min and max. Total samples per non-locked mate = samplesPerMate. | |
| gripperAperture | No | Optional gripper aperture request forwarded to review_cad. | |
| trackConnectors | No | Connector refs to track across sampled poses. | |
| outputRecordPath | No | Optional JSON path to write a Studio-compatible build record. | |
| preserveInterfaces | No | External mates, connector refs, part names, or behavioral interfaces the agent must preserve between attempts. | |
| allowReviewWarnings | No | Warning diagnostic codes the original prompt explicitly allows. Other review warnings keep the loop iterating even if review_cad is functionally ok. | |
| includeInterference | No | Forwarded to review_cad. Default true. | |
| includePoseEnvelope | No | Forwarded to review_cad. Default true. | |
| requireVisualReview | No | Require screenshot-backed visualReview with structured checks before accepting an attempt. Default true; set false only for explicit non-visual batch checks. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (no readOnly, destructive, or openWorld hints), so the description carries the burden. It discloses the loop flow: reviewing each attempt, continuing past functional attempts with warnings, returning repair prompts, and optionally writing a build record. No contradictions with annotations, and no hidden side effects are omitted.
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 two sentences (about 70 words), front-loading the purpose. It is efficient but could be slightly more structured (e.g., bullet points for key behaviors). Overall, it earns its length without significant waste.
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 high parameter count (16), nested objects, and no output schema, the description gives an overall process overview but does not specify return values or the structure of repair prompts. It covers the main loop behavior but lacks detail for a fully complete picture, especially given the complex input 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?
Schema description coverage is 94% (very high), so the schema already documents most parameters. The description adds high-level process context but does not detail individual parameter semantics beyond what the schema provides. The baseline score of 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 tool runs a CAD design loop over multiple attempts. It uses specific verbs and resources (review with review_cad, return repair prompts, write build record) and distinguishes itself from siblings like review_cad by focusing on the multi-attempt loop process.
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 opening phrase 'Use this when you need to run a CAD design loop over multiple attempts' gives explicit usage context. However, it does not mention when not to use this tool or describe alternatives among the many sibling tools, though no other tool appears to provide similar looping behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_scriptsDiff CAD ScriptsARead-onlyInspect
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, connectors, pose, limits), and param changes (value/min/max). Single-shape scripts diff as one "(root)" pseudo-part. Use after editing a script to verify exactly what changed physically before re-rendering. Read-only — never touches the active session.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Revised script — inline source. | |
| file | No | Revised script — path to a .kcad.ts file. | |
| baseCode | No | Baseline script — inline source. | |
| baseFile | No | Baseline script — path to a .kcad.ts file. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false. Description adds explicit 'Read-only — never touches the active session.' and details output format (per-part deltas, interference, mate-graph, param changes). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph but fairly long. However, every sentence adds value: usage guidance, output details, behavioral note. Front-loaded with purpose. Slightly verbose but not wasteful.
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 4 params, no output schema, the description fully explains output format (JSON with per-part details, interference, mate-graph, param changes, special case for single-shape scripts), read-only behavior, and usage context. No significant gaps.
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%. Description adds meaning beyond schema: explains parameter combinations (baseline vs revision), that exactly one baseline and one revision must be provided, and the logic of {baseFile}/{baseCode} vs {file}/{code}.
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 'diff', the resource 'CAD scripts', and the outcome 'structured geometric delta'. It distinguishes itself from siblings by focusing on version comparison, which is unique among the many sibling tools.
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?
Explicitly states when to use: 'Use after editing a script to verify exactly what changed physically before re-rendering.' Also implies when not to use (not for other purposes). Provides clear context and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_scriptEvaluate CAD ScriptARead-onlyInspect
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 }. Pass either { file: "" } or { code: "" }. Set { dryRun: true } for fast validation while iterating: transpile + capture + capture-light checks WITHOUT OCCT lowering, DFM gates, or meshing — milliseconds instead of seconds (100x+ on boolean/fillet-heavy scripts). A dry run catches script throws, capture-time API misuse, and assembly validity-gate failures, but NOT lowering failures or dfmSpec diagnostics; it leaves the active session untouched, so finish with a full (non-dry) evaluate_script before using session-dependent tools.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Inline kernelCAD script source. | |
| file | No | Path to a .kcad.ts script file. | |
| dryRun | No | Fast validation only: skip OCCT lowering, DFM gates, and meshing. Does not set or clear the active session. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description details what dryRun skips (OCCT lowering, DFM gates, meshing), its 100x speed advantage, and the implication that full evaluate affects the active session. This adds significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear front-loaded purpose, followed by technical details. It is slightly long but every sentence contributes to understanding. A minor trim could improve conciseness.
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 no output schema, the description adequately explains return values: pass/fail, feature count, diagnostics, and optional parts summary for assembly scenes. It also covers edge cases like dryRun, making it contextually 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?
With 100% schema description coverage, the description adds substantial meaning: explains the mutual exclusivity of file and code parameters, provides examples, and describes the dryRun behavior in detail, including what validation it performs and what it skips.
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 evaluates a CAD script, reporting pass/fail, feature count, diagnostics, and optionally a parts summary. It uses specific verbs ('run', 'check', 'report') and distinguishes from siblings by focusing on script compilation and evaluation.
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 says 'Use this when you need to run a script and check it compiles' and explains the dryRun option for fast validation. It provides clear context for when to use dryRun vs full evaluate, but does not explicitly mention when to use alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_sdfEvaluate SDFARead-onlyInspect
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('', field) and pass that name as fieldName. Hint: pass either { file } or { code }, plus { fieldName, point: [x,y,z] }.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Inline kernelCAD script source. | |
| file | No | Path to a .kcad.ts script file. | |
| point | Yes | Sample point [x, y, z] in mm. | |
| fieldName | Yes | sdf.bind binding name holding the SdfField. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true; description adds details on return value structure (distance, inside, aabb, kind) and distance meaning in mm. No contradiction. Adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, concise sentences, no fluff. Every sentence adds value. Well-structured.
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?
Despite no output schema, description explains return structure. All parameters covered. Completes the picture for an agent to use effectively.
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 100%, but description adds critical context: script must bind SdfField via sdf.bind and pass name as fieldName. Also hints about file or code. Adds meaning beyond 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 verb 'sample' on the resource 'signed-distance field' and distinguishes from sibling 'sdf.materialize' by noting it is an expensive step. This provides specific purpose and differentiation.
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?
Explicitly says when to use: 'to verify SDF composition before calling sdf.materialize'. Implies alternative is materialize. Could strengthen by stating when not to use, but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exportExportAInspect
Use this when you need to export geometry to a file. One exporter, selected by target:
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/top/left + isometric views, hidden edges dashed, tangent edges thin, overall bounding-box dimensions, title block; assemblies are drawn with inter-part occlusion). Robot descriptions: urdf (tree-topology robot description), srdf (motion-planning semantics layered over the URDF), sdf-gazebo (SDFormat 1.10 with native ball joints, closed loops, and solved per-link poses). urdf and sdf-gazebo also write one meshes/.stl per link next to output_path (reported in mesh_files) — ship the whole directory to the consumer. STL exports run a watertight verify by default; failures return ok: false with export.mesh.not-watertight (open-edge count + up to 5 crack-cluster locations) but the file is still written so the broken mesh can be inspected. Optional { feature_id } selects which feature to export (default: last). Optional { options } carries per-format options bag (see the kernelcad-mcp skill for the per-format keys: dxf layers/tolerance/unit, 3mf printUnit/embedSource, glb axis/draco).
target:'part' — export solved-assembly parts as individual binary STL files in their modeled (world-frame) positions. Pass { file | code }, plus { part, output_path } for one part or { output_dir } for all parts (files land at /.stl). A watertight verify runs on every exported mesh by default and fails the call with export.mesh.not-watertight; unknown part names fail with export.part.not-found listing the valid names. Pass { no_verify: true } to skip the watertight gate. All params except
targetare forwarded verbatim; each target fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Inline kernelCAD script source. | |
| file | No | Path to a .kcad.ts script file. | |
| part | No | target:'part' — part name for single-part export, or 'all'. | |
| format | No | target:'model' — output file format (required for that target). | |
| target | Yes | Which exporter to run: 'model' (whole-script geometry to one file) or 'part' (per-part STLs from a solved assembly). | |
| options | No | target:'model' — optional per-format options bag. Discriminator options.format must equal top-level format. dxf: { layers?, unit?: "mm"|"cm"|"in", tolerance? }. 3mf: { printUnit?: "mm"|"cm"|"in", embedSource? }. glb: { axis?: "y-up"|"z-up", draco?: false }. svg-drawing: { sheet?: "a4"|"a3", modelName?, date? }. | |
| no_verify | No | Skip the STL watertight verify gate. | |
| feature_id | No | target:'model' — optional FeatureId to export; defaults to last. | |
| output_dir | No | target:'part' — destination directory (all-parts mode); files are <dir>/<part>.stl. | |
| output_path | No | Destination path. target:'model' — the export file (required). target:'part' — single-part .stl path. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, openWorldHint=true), the description reveals detailed behavior: file creation, watertight verification, error codes (export.mesh.not-watertight, export.part.not-found), multi-file output for URDF/SDF, and the effect of no_verify. This far exceeds what annotations alone provide.
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 lengthy but well-structured with clear sections for each target and bullet-like details. It is front-loaded with the primary purpose. Some redundancy exists (format list repeated in schema and description), but overall each sentence provides unique, actionable information.
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 10 parameters, nested objects, and no output schema, the description fully covers all aspects: required vs optional params, error behavior, file output details, and verification mechanics. It even explains how to interpret failures and what files are written where. No gaps remain.
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 significant value by explaining parameter interdependencies (e.g., 'target' determines required params), listing per-format options for the 'options' parameter, and clarifying the roles of ambiguous parameters like 'part' and 'output_dir'. This justifies above baseline.
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 'export geometry to a file' and distinguishes two specific targets ('model' and 'part') with detailed sub-descriptions. It uses specific verbs and resources, making the tool's unique purpose evident among 40+ sibling tools.
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 opens with 'Use this when you need to export geometry to a file' and provides explicit guidance for choosing between the two targets ('target: model' vs 'target: part'). It also explains failure conditions and the optional verification. However, it does not explicitly mention when to avoid this tool or suggest alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_partFetch PartARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| query | No | ||
| family | No | ||
| category | No | ||
| standard | No | ||
| partsBaseUrl | No | Opt-in remote endpoint; no default value ships with kernelCAD. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing the side effect of writing the STEP file to the local cache and the network dependency for non-bundled ids. This complements the readOnlyHint=true (server-side read) and openWorldHint=true. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (2 sentences, ~58 words) and front-loaded with the main purpose. Every sentence adds distinct value without redundancy.
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 the primary use case and return format (cache path + fingerprint), but does not explain all parameters (family, category, standard) nor mention error conditions, prerequisites (like partsBaseUrl requirement), or detailed behavior for edge cases. Given no output schema, more detail would be beneficial.
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 only 17% (only 'partsBaseUrl' has a description). The description clarifies 'id' and 'query' as identification methods ('single-match query') but does not explain 'family', 'category', or 'standard', leaving their meaning ambiguous. The description partially compensates but leaves gaps.
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 action ('download a catalog part as a STEP file') and the resource, with a specific verb and context. It distinguishes from siblings like 'find_part' (which likely only searches) and others by specifying the output (STEP file, cache path, fingerprint).
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 good context for when to use ('when you need to download a catalog part as a STEP file') and explains the id vs query resolution and offline/online behavior. However, it does not explicitly exclude cases or compare to alternatives beyond implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_partFind PartARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| query | No | ||
| family | No | ||
| source | No | ||
| category | No | ||
| standard | No | ||
| partsBaseUrl | No | Opt-in remote endpoint; no default value ships with kernelCAD. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by explaining the fuzzy query and faceted filter behavior, AND-combination of tokens and filters, and the distinction between bundled and remote results. Annotations already indicate readOnlyHint=true and openWorldHint=true, and the description aligns with these. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of three sentences. It front-loads the primary use case and provides essential behavioral details without unnecessary words. Every sentence contributes meaningful information.
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 parameters and no output schema. The description explains the core query mechanism and remote/bundled distinction, but lacks details on return format, pagination (limit parameter), meaning of the 'auto' source, or how to interpret results. Given the complexity, additional context would improve completeness.
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 low (13%, only partsBaseUrl has description). The description indirectly explains the query parameter (fuzzy query) and faceted filters (tag, family, category, standard, source) and their AND-combination, but does not detail each parameter individually. This provides some semantic value but not enough to fully compensate for the low coverage.
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: to find a part in the catalog using fuzzy query and faceted filters. It specifies the resource (part-catalog records) and the action (find), and distinguishes between bundled and remote results, which helps differentiate from siblings like fetch_part or add_part.
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 a clear use case ('Use this when you need to find a part in the catalog') and explains how tokens and filters work (AND-combine). It also gives guidance on enabling the remote tier via partsBaseUrl or environment variable. However, it does not explicitly state when not to use the tool or mention alternative tools, which would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flatten_patternFlatten Sheet-Metal PatternARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| file | No | ||
| featureId | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. The description adds value by detailing the output format ('Region with outer polyline, holes, bend lines, sketch plane') and the behavioral constraint ('at most 2 bends'), going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three sentences, each serving a distinct purpose: purpose, output, and usage. No extraneous information, and the structure is logical.
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 moderate complexity (3 parameters, no output schema), the description covers the purpose, output structure, and a usage constraint. It could be more complete by explaining what happens if more than 2 bends or clarifying the 'file' vs 'code' formats, but overall is sufficient for an agent to use 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?
Schema coverage is 0%, so the description must compensate. It explains that 'file' and 'code' are alternatives and 'featureId' is optional to pick a specific shape. This adds meaning beyond the schema but lacks details on file format or code syntax, so it is adequate but not comprehensive.
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: 'unfolded flat pattern of a bent sheet-metal part.' It specifies the verb ('unfolded') and resource ('bent sheet-metal part'), and distinguishes it from sibling tools which are all unrelated, ensuring no ambiguity.
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 when to use this tool ('when you need the unfolded flat pattern') and provides a usage constraint ('Slice 1: at most 2 bends'). However, it does not mention when not to use it or suggest alternatives, which would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_renderGet Latest RenderARead-onlyInspect
Fetch the latest rendered PNG of a project's current model — captured by its open Studio viewer — as a signed image URL, for a visual self-check. Use this when you have edited a model and want to SEE the result: after open_in_studio with a slug, the user's open /p/ tab snapshots the 3D viewport and uploads it; call this with that slug to retrieve the freshest snapshot and inspect whether the build looks right. The slug is the capability: no OAuth required for public/unlisted projects; private projects require the owner to be signed in. Returns a short-lived signed URL plus the capture timestamp. If no render exists yet, returns { ok: false, error: "no_render" } with a hint to open the Studio link so it can capture one.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Project slug from open_in_studio/get_project/a /p/<slug> link. The slug is the capability — public/unlisted projects need no OAuth; private projects require the owner to be signed in. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds critical auth behavior (slug as capability, OAuth needs), return structure (signed URL + timestamp), error handling (no_render with hint), and the capture mechanism, providing excellent transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with the primary purpose, then usage context, auth details, return type, and error case. Every sentence adds value without redundancy.
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?
Despite lacking an output schema, the description fully explains the return structure, error conditions, and dependencies (open viewer). It is complete for an AI agent to correctly invoke and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of 'slug'. The description adds semantic context: the slug's role as a capability and auth implications, enhancing the schema's meaning.
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 explicitly states 'Fetch the latest rendered PNG', specifying the verb and resource. It clearly distinguishes from sibling tools by explaining the capture process and its role after open_in_studio.
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 clear guidance on when to use ('after you have edited a model and want to SEE the result', 'after open_in_studio') and what to do if no render exists. While it doesn't explicitly state when not to use it, the context is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet ProjectARead-onlyInspect
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/ 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 updated first); that listing mode requires the OAuth connection.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | The project slug from a listing or a /p/<slug> Studio link. Omit to list the signed-in user's saved projects. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: it explains the two operational modes, the necessity of OAuth for private projects and listing, and the live-update behavior of the user's tab. 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 a single focused paragraph that efficiently covers both modes, OAuth requirements, and integration with other tools. It is well-structured and front-loaded, though slightly 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?
Given the tool has two distinct modes, a single optional parameter, no output schema, and basic annotations, the description thoroughly covers all necessary details: when to use each mode, auth requirements, and relation to edit and open_in_studio. It is fully adequate for an agent to use 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 the input schema has 100% coverage for the single parameter, the description adds valuable semantic context: where the slug originates, that omitting it triggers listing, and the OAuth requirement. This enhances understanding beyond the schema's property 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 uses specific verbs 'fetch' and 'list' and clearly distinguishes between retrieving a single project by slug and listing all saved projects. It also ties the tool to subsequent actions like 'edit' and 'open_in_studio', differentiating it from siblings.
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 when to use the tool ('when you need to reopen a saved project or browse what the user has saved') and provides clear conditions for each mode (with/without slug). It mentions OAuth requirements but does not compare directly with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspectInspect ModelARead-onlyInspect
Use this when you need to read facts about a model. One reader, selected by of:
'assembly' — physical assembly inventory (parts, bboxes, connectors, mates, disconnected solids).
'robot' — URDF/SDFormat export preview (links, joints, planning groups, end-effectors, issues).
'step' — inspect an imported STEP file.
'shape' — volume / surfaceArea / bbox for one feature ({ feature_id? }).
'features' — features captured by the script (kind, id, params, transforms, suppression).
'assemblies' — assembly intent (assemblies, parts, connectors, joints).
'topology' — canonical face names + edge count for a feature ({ feature_id? }).
'edges' — edges of a shape with optional EdgeQuery ({ feature_id?, query? }); returns @kc[...] refs.
'face-edges' — boundary edges of a named canonical face ({ feature_id?, face_name }).
'faces' — faces of a shape with optional FaceQuery ({ feature_id?, query? }); returns @kc[...] refs.
'face-labels' — user-applied labels visible in the script.
'mates' — mates captured by the script.
'constraints' — sketch constraints captured by the script.
'part-stats' — bundled parts-catalog statistics.
'bend-table' — sheet-metal bend table for a flattened pattern.
'params' — declared model parameters.
'part-categories' — top-level part-catalog categories available in the bundled (and configured remote) catalog.
'part-families' — part families within a category ({ category? }); count + exemplar ids per family. All params except
ofare subject-specific and forwarded verbatim. Most subjects accept { file | code }.
| Name | Required | Description | Default |
|---|---|---|---|
| of | Yes | Which facts to read. | |
| code | No | Inline kernelCAD script source. | |
| file | No | Path to a .kcad.ts script file. | |
| query | No | of:'edges'|'faces' — optional EdgeQuery/FaceQuery filter. | |
| assembly | No | of:'assembly'|'robot' — assembly name; defaults to the first captured assembly. | |
| category | No | of:'part-families' — optional top-level category to filter families by. | |
| face_name | No | of:'face-edges' — canonical face name (required for that subject). | |
| feature_id | No | of:'shape'|'topology'|'edges'|'faces'|'face-edges'|'face-labels' — FeatureId; defaults to the last returned shape. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about parameter forwarding, default feature_id, and that most subjects accept file or code, providing useful behavioral details beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening and bullet list for subjects. While verbose with 18 items, it is organized and every sentence adds value, though some grouping could improve conciseness.
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 and lack of output schema, the description provides enough detail for each subject (e.g., returns 'physical assembly inventory' for assembly) and explains parameter usage. It is mostly complete, though some subjects could use more explicit output format hints.
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%, but the description adds extensive context for each subject, explaining what each returns and which parameters are relevant. It clarifies that all params except 'of' are subject-specific, significantly aiding parameter understanding.
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 'Use this when you need to read facts about a model' and lists 18 specific subjects, making it distinct from sibling tools that add, modify, or export. Verb 'inspect' with resource 'model' is 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 opens with when to use the tool and provides a comprehensive list of subjects. However, it does not explicitly mention when not to use it or compare to alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_apiLook Up APIARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint. The description adds minimal behavioral context beyond what is listed (e.g., it is a list operation). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words.
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 no parameters and no output schema, the description fully covers what the tool does and why to use 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?
There are 0 parameters, so no additional explanation needed. Schema coverage is 100%.
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 it lists the kernelCAD script-runtime surface, including specific functions and methods. It distinguishes from sibling lookup tools by its specific focus.
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 when to use the tool ('when you need to list the kernelCAD script-runtime surface') and provides context for discovery. It implies alternatives (other lookup tools) but does not explicitly exclude them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_authoring_skillLook Up Authoring SkillARead-onlyInspect
Return the kernelcad-authoring SKILL.md body — conventions for writing .kcad.ts scripts (imports, parameters, evaluation contract, common pitfalls).
Use this tool BEFORE generating CAD code if your MCP client does not list resources. Clients that do list resources should instead read kernelcad://skills/authoring directly — the contents are identical.
INPUT: none. OUTPUT: { uri, mimeType, text } where text is the SKILL.md body.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds output structure details ({ uri, mimeType, text }) and notes equivalence to a resource, providing good 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?
Three concise sentences: purpose, usage guidelines, input/output. No wasted words, front-loaded with purpose.
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 simple read tool with no parameters and no output schema, the description covers purpose, usage context, and output format completely. The agent has all needed information.
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?
No parameters, so baseline 4. The description explicitly states 'INPUT: none.' Schema coverage is 100% trivially, no additional semantics needed.
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 it returns the SKILL.md body for authoring conventions, with a specific verb and resource. It distinguishes from sibling lookup tools like lookup_api by specifying the content (kernelcad-authoring SKILL.md).
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?
Explicitly states when to use (before generating CAD code if client does not list resources) and when not to (if client lists resources, use direct resource URI). Provides alternative method.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_cookbookLook Up CookbookARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Max snippets to return. Default 3, max 5. | |
| query | Yes | Natural-language description of what you want to do (e.g. "round the rim of a hole", "build an L-bracket"). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds details beyond annotations: ranking by BM25 over title/tags/keywords/trigger, and behavior when no snippet scores above relevance floor. No contradiction with readOnlyHint and destructiveHint.
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?
Five sentences, front-loaded with purpose and usage. Efficient but could be more structured. No redundancy.
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?
Covers key aspects: purpose, when to use, retrieval details, empty result handling. Slight gap: output snippet structure not described, but plausible from context.
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 3. Description explains that k controls max snippets and query is natural-language, but adds minimal new meaning (e.g., ranking method). Adequate but not exceptional.
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 explicitly states the tool searches the kernelCAD cookbook for canonical pattern snippets, using specific verbs ('search', 'returns') and resource ('cookbook'). It distinguishes from sibling tools like lookup_api by focusing on canonical patterns.
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 scenarios (e.g., 'fillet-after-subtract') and when-not-to-use (empty result indicates proceed without cookbook help). No alternatives listed, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_diagnosticsLook Up DiagnosticsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it's a 'tiny one-shot call' and gives 'the canonical list up front', providing extra behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the purpose, and contains no unnecessary words or repetition. It is concise and well-structured.
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 zero-parameter, no-output-schema tool with good annotations, the description is complete. It explains the tool's output (catalogue with hint templates) and its utility. Minor improvement could elaborate on return format, but current is sufficient.
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 tool has no parameters, and schema description coverage is 100%. The description does not need to add parameter details since none exist. Baseline score of 4 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 provides the 'kernelCAD 26-code diagnostic catalogue with hint templates', using specific verbs and resource. It distinguishes itself from sibling lookup tools like lookup_api and lookup_cookbook by specifying the exact catalogue type.
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 says 'Use this when you need the kernelCAD 26-code diagnostic catalogue' and gives a concrete use case ('pre-populate retry strategies'). It could be improved by noting when not to use it or naming alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_in_studioOpen in StudioAInspect
Use this when the user wants to SEE or share the model — it persists the current kernelCAD model and returns a one-click link that opens it in the kernelCAD Studio web app, where the user can view and share it. Pass the full .kcad source you have been building as code. code is OPTIONAL: if you just called evaluate_script you can omit it and this reuses that last evaluated source automatically (no need to re-send the whole script). Pass code explicitly to override, or whenever you have not evaluated this exact source yet. The result includes a slug — pass that slug on every subsequent call to UPDATE the same project in place: the user's open Studio tab re-renders live, so they can watch the model evolve as you iterate. Omit slug only for a new, separate model (each omission creates a new project and link). Trigger phrases: "open it in Studio", "let me see it", "show me the model"; also call it after you finish a build, and after each meaningful revision while iterating.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | The full .kcad source of the model to open in Studio (the script you have been editing). Optional: omit to reuse the source from your most recent evaluate_script call. | |
| slug | No | Slug returned by a previous open_in_studio call. When given, updates that existing project in place (live-updating the user's open Studio tab) instead of creating a new one. | |
| title | No | Optional human-readable title for the model (shown in Studio). Defaults to "Model from Claude". | |
| parameters | No | Optional list of the model's editable parameters, so Studio can show parameter controls. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds behavioral context: it persists the model, returns a link, and allows live updating by passing slug. It does not contradict annotations and provides useful details beyond the structured fields.
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 comprehensive but a bit lengthy. However, every sentence serves a purpose: main usage, parameter details, and usage tips. The structure is logical and front-loaded with key information, making it easy for an agent 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?
Given 4 optional parameters and no output schema, the description covers the essential usage scenarios: creating new projects, updating existing ones, and reusing code from evaluate_script. It could be more explicit about error cases (e.g., missing both code and slug when no prior evaluate_script), but overall it is complete for typical use.
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 descriptions for all 4 parameters. The description adds significant value: explains that 'code' is optional and can reuse last evaluated script, 'slug' updates an existing project live, and 'title' and 'parameters' are optional enhancements. This goes beyond what the schema alone provides.
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 persists the current kernelCAD model and returns a one-click link to open it in Studio for viewing and sharing. It includes trigger phrases and distinguishes itself by being the only tool that opens models in the Studio web app, which sets it apart from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: use when user wants to SEE or share the model, after finishing a build, or after each meaningful revision. It explains when to omit slug for new projects and when to pass slug to update. While it does not explicitly state when not to use it, the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_curveProject CurveAInspect
Use this when you need to wrap a 2D curve onto a 3D face. Insert a <shape>.projectCurve({ curve, face, scaleMode?, asEdge? }) chained call into a kernelCAD script. Wraps a 2D closed curve onto a 3D face along the face normal; pair with .extrude(d) / .cut(...) for engraved logos or label inserts on curved bodies. asEdge: true is captured but currently deferred at lower time (BRepProj_Projection not bundled). Side-effect-free; returns modified code plus diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| face | Yes | Target face — canonical name or label. | |
| asEdge | No | Project as an open edge instead of a closed face-bound sketch. Currently deferred. | |
| bindAs | No | Optional local variable name; emits `const <bindAs> = <target>.projectCurve(...);`. | |
| target | Yes | Variable name of the Shape to chain onto. | |
| scaleMode | No | Drawing.sketchOnFace scaling mode. Default original. | |
| curveExpression | Yes | JS expression returning a closed sketch (e.g. `path().moveTo(0,0).lineTo(2,0).lineTo(2,2).close().build()`). Inserted verbatim as the `curve:` field. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states it's side-effect-free and returns modified code plus diagnostics, aligning with annotations. Also discloses deferred feature (asEdge) and missing library, adding transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense paragraph front-loads purpose. Could be more structured with bullet points, but all information is essential and efficiently conveyed.
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?
Covers purpose, usage, parameters, behavior, and limitations (deferred feature). No output schema but description explains return value adequately.
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%, but description adds significant value: explains curveExpression as JS expression with example, asEdge as deferred, and scaleMode options. No contradiction with 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 explicitly states 'wrap a 2D curve onto a 3D face' with verb and resource. Differentiates from siblings by specifying it's for 2D to 3D projection and pairing with extrude/cut.
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?
Clearly indicates when to use ('Use this when...') and gives usage example (chained call). Does not explicitly state when not to use, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryQuery GeometryARead-onlyInspect
Use this when you need to resolve or inspect topology against a script's lowered geometry. Selected by mode (default 'evaluate'):
'evaluate' — inspect a Query (@kc[...] ref, @kcq[...] DSL, or { ast }); returns matched entities. Pass expect:'unique' to assert exactly-one.
'resolve' — resolve a single @kc[...] / @kcq[...] ref to one entity ({ ref }).
'lineage' — walk the HistoryMap for a named face ref ({ feature_id, ref }). All params except
modeare forwarded verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | mode:'resolve'|'lineage' — topology ref string. | |
| code | No | Inline kernelCAD script source. | |
| file | No | Path to a .kcad.ts script file. | |
| mode | No | Resolution mode (default 'evaluate'). | |
| query | No | mode:'evaluate' — Query input: @kc[...] / @kcq[...] string or { ast } object. | |
| expect | No | mode:'evaluate' — 'unique' asserts exactly-one. | |
| feature_id | No | Optional FeatureId; defaults to the last lowered shape (use "auto" for lineage). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description details mode-specific behaviors, parameter forwarding ('All params except mode are forwarded verbatim'), and the purpose of each mode.
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: one introductory sentence followed by a clear bullet list of modes. No extraneous content.
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 explains inputs and modes but does not fully describe return values for all modes, especially 'lineage' which only says 'walk the HistoryMap' without return details.
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?
While schema coverage is 100%, the description adds semantic grouping by mode, clarifying which parameters are relevant for each mode and adding examples like 'expect:unique'.
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 resolves or inspects topology against a script's lowered geometry, with three distinct modes. It uses specific verbs and resources, and the modes are 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?
The description starts with 'Use this when...' and explains each mode's use case, but does not explicitly state when not to use it or compare it to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_featureRemove FeatureADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| match | Yes | A substring that uniquely identifies the line to remove (e.g. `const hole = cylinder(5,`). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds valuable behavioral details: returns modified code and diagnostics, and refuses to remove the line with the return statement. The claim 'Side-effect-free' is somewhat redundant with destructiveHint but not contradictory.
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?
Four efficient sentences with no redundancy. The first sentence front-loads the purpose, followed by mechanism, constraint, and safety claim. 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?
For a destructive tool with 2 parameters and no output schema, the description covers: when to use, how identification works, what is returned (modified code + diagnostics), a refusal constraint, and a side-effect-free claim. It is complete for an AI agent to invoke 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%. The description clarifies the 'match' parameter as a substring that uniquely identifies the line, adding meaning beyond the schema's type descriptions. It also gives usage context for both parameters.
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 'remove' and the resource 'feature line from a script', with specific detail on using a substring match and that it removes a single line. It distinguishes itself from sibling 'add' tools effectively.
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 opening sentence explicitly tells when to use this tool. It also provides a specific constraint (refuses to remove return statement), which aids in appropriate use, but does not explicitly mention alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_previewrender_previewAInspect
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: "," } arbitrary camera angle (degrees; az=0,el=0 is front, +az rotates CCW around +Z, +el lifts the camera). NO STUDIO / DEV-SERVER REQUIRED: a prebuilt static player (dist/headless-player) is served from an ephemeral local port automatically; a running studio dev server is used as fallback, and { base_url } forces one. The only environment dependency is playwright chromium (npx playwright install chromium). Pass { focus } or { hide } (arrays of feature ids or assembly part names, mutually exclusive) to isolate parts — same semantics as kernelcad render --focus/--hide. PNGs are written to { out_dir } (default: a fresh temp session directory) and returned as absolute paths with per-view camera descriptions (kernelCAD is Z-up). Mechanism truth runs first, same protocol as kernelcad render: a broken mechanism still renders but every tile is watermarked MECHANISM BROKEN (KERNELCAD_RENDER_STRICT=1 refuses instead); read { mechanism, mechanism_failure_codes }. The probe runs full BREP interference sweeps and can dominate latency on large assemblies — pass { no_mechanism_check: true } for fast iteration (the preview then reports mechanism: "unverified"; ignored under strict mode). Returns { ok, images: [{ name, path, description }], out_dir, bounds, mechanism, render_source, render_ms, diagnostics }. PATHS ARE LOCAL to the machine running the MCP server — local stdio clients read them directly; hosted/remote clients should use open_in_studio instead.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Inline kernelCAD script source. Mutually exclusive with file. Relative imports resolve against a temp dir — use file for scripts with relative lib.fromSTEP(...) imports. | |
| file | No | Path to a .kcad.ts script on disk. Mutually exclusive with code. | |
| hide | No | Hide matching feature ids / assembly part names. Mutually exclusive with focus. | |
| pose | No | Extra arbitrary camera pose '<az>,<el>' in degrees, e.g. '30,20'. | |
| focus | No | Show only matching feature ids / assembly part names. Mutually exclusive with hide. | |
| views | No | Canonical views to render (default: all four). Fewer views = faster. | |
| width | No | Per-view tile width in px (default 768). | |
| height | No | Per-view tile height in px (default 768). | |
| out_dir | No | Directory for the PNGs (created if missing). Default: a fresh temp session dir. | |
| base_url | No | Advanced: force a specific render server (e.g. a running studio dev server) instead of the bundled static player. | |
| environment | No | HDRI environment override: preset ('studio', 'softbox', 'neutral', 'outdoor', 'warehouse'), a URL, or 'none' for the default three-light rig. | |
| no_watermark | No | Suppress the kernelCAD version watermark. | |
| no_mechanism_check | No | Skip the mechanism-truth probe for fast iteration on large assemblies; the preview reports mechanism: 'unverified'. Ignored under KERNELCAD_RENDER_STRICT=1. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a non-read-only, non-destructive operation. The description adds substantial behavioral context: it explains the mechanism truth probe, watermarking for broken mechanisms, strict mode behavior, latency impact of interference sweeps, and the fact that returned paths are local. This goes well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense with useful information. It uses clear structuring with bullet points and separated sections. There is minor redundancy (e.g., emphasizing 'NO STUDIO / DEV-SERVER REQUIRED' twice), but overall it is efficient and front-loaded with the core purpose.
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?
Despite having no output schema, the description fully explains the return structure (images array with name, path, description; fields like mechanism, render_source, diagnostics). It covers edge cases (broken mechanism, strict mode, local paths for remote clients) and provides complete context for a complex 13-parameter 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 description coverage is 100%, so baseline is 3. The description adds meaningful context beyond the schema: it explains mutual exclusivity of code/file and focus/hide, details the pose coordinate system (az=0,el=0 is front, +az CCW, +el lifts), and explains environment presets. This adds value over 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's purpose: to render a kernelCAD model script to deterministic PNG views for visual self-check. It uses specific verbs ('render', 'look at') and resources ('kernelCAD model', 'PNG views'), and distinguishes it from siblings like 'open_in_studio' and 'evaluate_script'.
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 when to use the tool ('when you need to LOOK at a kernelCAD model'), clarifies that no studio or dev server is required, and mentions alternatives for remote clients ('open_in_studio'). It also provides guidance on skipping mechanism check for fast iteration. However, it does not explicitly state conditions when the tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_cadReview CAD ModelARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Inline kernelCAD script source. | |
| file | No | Path to a .kcad.ts script file. | |
| assembly | No | Assembly name; defaults to the first captured assembly. | |
| designGoal | No | Original user design prompt or goal. Included in suggestedRepairPrompt so topology-redesign repairs restart from the intended physical design instead of local coordinate nudges. | |
| epsilonMm3 | No | Interference volume threshold in mm^3. Default 0.01. | |
| combinatorial | No | Sample all 2^N limit-corner combinations across mates with declared limits. Capped at 8 mates with limits; combine with samplesPerMate for both interior coverage and worst-pose detection. Default false. | |
| samplesPerMate | No | Pose-envelope samples per declared-limit mate. 1 (default) = corners only; >=3 adds uniform interior points between min and max. Total samples per non-locked mate = samplesPerMate. | |
| gripperAperture | No | Optional fingertip connector refs for gripper aperture travel reporting. | |
| trackConnectors | No | Optional connector refs such as ["gripper-plate.tool-tip"] to limit connector workspace reporting. | |
| preserveInterfaces | No | External mates, connector refs, part names, or behavioral interfaces the repair agent must preserve during redesign. | |
| includeInterference | No | Whether sampled poses run BREP interference checks. Default true. | |
| includePoseEnvelope | No | Whether to sample declared mate limits. Default true. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description outlines the deterministic CAD review loop in detail (evaluate script, validate assembly/mate graph, check connectors, sample limits, check interferences, report bounds, return fitness verdict). This aligns with annotations (readOnlyHint=true, destructiveHint=false) and adds behavioral context beyond them. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at about four sentences, front-loading the usage scenario. It lists the steps in the review loop efficiently, but could potentially be slightly more streamlined without losing key information.
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 explains the overall process and mentions the output includes a fitness verdict with repair modes. However, without an output schema, the description would benefit from more detail on the exact structure or fields of the return value, leaving some uncertainty for the agent.
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 already has a description. The tool description does not add additional parameter-specific information, so the baseline score of 3 is appropriate. The description focuses on the overall process rather than parameter semantics.
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: reviewing a mechanism for fitness and repair mode. It uses a specific verb ('review') and resource ('CAD model' / 'mechanism'), and distinguishes itself from sibling tools which are primarily for creation and modification.
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 says 'Use this when you need to review a mechanism for fitness and repair mode,' providing clear usage context. However, it does not mention when not to use this tool or suggest alternatives, though the sibling tools are different enough that confusion is unlikely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_paint_peek_latestGet Latest Painted Review FeedbackARead-onlyInspect
Return the newest brush-painted review packet from a Studio session. After sharing a /p/ 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 passing slug; private projects require the owner to be signed in. Omit slug to fetch your own latest packet from your signed-in account (requires OAuth). By default returns short-lived signed Storage URLs for the screenshot + mask + meta.json plus the struck part names — small and context-friendly. Pass paths_only: false to also base64-inline the PNGs for clients that cannot fetch the signed URLs over HTTP.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Project slug from open_in_studio/get_project/a /p/<slug> link. When given, returns the latest brush packet painted on that project's page — works without OAuth; the slug is the capability. Omit to use your signed-in account's latest packet. | |
| paths_only | No | Controls PNG delivery. Default (omitted or true): return only signed URLs + struck part names — the small, context-friendly response; fetch the bytes via the signed URLs. Set false to also base64-inline the screenshot + mask PNGs for clients that cannot fetch the URLs over HTTP (larger response). | |
| freshness_sec | No | Maximum packet age in seconds. Default 1800 (30 min). Use a smaller value for "what did I just paint" or a larger one for "earlier today". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds: no OAuth required with slug, private projects require signed-in owner, short-lived signed URLs, and parameter effect on response size. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph that is informative and well-structured, front-loading purpose. Slightly lengthy but earns its sentences.
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?
Covers all aspects: slug usage, OAuth scenarios, path behavior, response contents (screenshot, mask, part names, note, intent tags). No gaps for an agent to select and invoke 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%, but description adds operational context: slug's capability-based access, paths_only controls inline vs URL, freshness_sec age limit. This goes beyond schema definitions.
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 'Return' and the resource 'newest brush-painted review packet from a Studio session.' It distinguishes from siblings like 'review_cad' by focusing on painted feedback from a /p/<slug> link.
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?
Describes when to use: after sharing a link and painting marks, call with slug; or omit slug for own latest with OAuth. Does not explicitly state when not to use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paramSet ParameterAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| new_value | Yes | The new default value — number for numeric params, string for expressions. | |
| param_name | Yes | The string literal name of the param (first arg to param()). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations (readOnlyHint=false, destructiveHint=false), the description adds valuable behavioral context: it is a pure function with no side effects, returns modified code plus diagnostics, and the caller must persist via file-write tools. This goes beyond the annotations and fully discloses behavior.
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?
Two sentences with no fluff: first sentence states purpose, second explains output and persistence. Front-loaded and efficient.
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 simple editing tool with 3 parameters and no output schema, the description fully covers what it does, what it returns, and how to persist. Complete and self-contained.
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 described. The description adds context beyond schema by explaining 'param_name is the first arg to param()' and associating with editing a param default value. This is helpful but not critical given complete 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 verb 'edit' and resource 'param() default value in a kernelCAD script', distinguishing it from sibling tools that add elements (e.g., add_connector, add_constraint). It is specific and 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 clearly says 'Use this when you need to edit a param() default value', setting clear usage context. However, it does not explicitly mention when not to use or provide alternatives, though the sibling list implies many other tools for different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_scene_returnSet Scene ReturnAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| mode | Yes | ||
| poses | No | Optional solvedModel pose overrides keyed by mate name. Defaults to {}. | |
| options | No | Optional solvedModel options such as { validate: 'warn', posesGate: 'envelope' }. | |
| assembly_binding | Yes | JS identifier bound to assembly(...). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the modification behavior ('Replace the final top-level return statement') and output ('Returns modified source plus diagnostics from re-evaluation'). Annotations (non-readOnly, non-destructive) are not contradicted, and the description adds useful details.
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?
Two sentences, front-loaded with purpose, no wasted words. Every sentence adds essential information.
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?
Covers purpose, mode selection, return value, and parameter hints. Lacks detail on diagnostic format but is sufficient given no 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?
Schema coverage is 80%, and the description adds meaning to `mode`, `poses`, `options`, and `assembly_binding`. It explains when to use each mode and the purpose of optional parameters 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 explicitly states the tool's purpose: 'Use this when you need to set how the script returns its assembly.' It specifies replacing the return statement with either `model()` or `solvedModel()`, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use the tool and when to choose `solvedModel` over `model` ('Use solvedModel for mate-authored mechanisms so FK and validation run.'). Does not explicitly mention when not to use it, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solve_matesSolve MatesBRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| poses | No | Optional numeric pose overrides keyed by mate name. | |
| assembly | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds return format and optional overrides, which aligns with read-only behavior. No contradictions, but little additional depth beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, efficient wording. No extraneous information.
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?
Describes core functionality and return format. Lacks explanation for 'assembly' parameter, error handling, or prerequisites. Adequate but not fully comprehensive for a solver 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 50% with 'assembly' parameter undescribed. Description explains 'poses' override semantics but omits explanation for 'assembly', leaving ambiguity. Insufficient compensation for low schema coverage.
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 states specific verb 'solve the mate graph' and resource 'get part poses'. Clear purpose but does not explicitly differentiate from sibling tools like solve_sketch, though context implies solving mates.
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?
Implies usage when needing to solve mate graph, but no direct when-not-to-use or alternative recommendations. Lacks explicit exclusion or comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solve_sketchSolve SketchARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entities | Yes | Sketch entities to solve. Lines reference point ids; circles reference a center point id. | |
| constraints | Yes | Constraints to apply to the entities. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint true and destructiveHint false. Description adds 'Side-effect-free' and explains input/output structure, including that entities are specific types and constraints use a vocabulary. This provides useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences but the first sentence is repeated ('Solve a 2D sketch constraint set' twice). It is short but contains redundancy. Could be more concise without losing 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 no output schema, description explains return value (solved entities + constraints) and mentions entity types. It covers the basic workflow but could mention error handling or edge cases. However, for a side-effect-free solver with simple inputs, it is reasonably 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?
Schema coverage is 100% with descriptions, so baseline is 3. Description adds that entities are POINT, LINE, and CIRCLE records and constraints use kernelCAD vocabulary, adding meaning beyond the generic 'array of objects' schema. This compensates for missing type details.
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?
Clearly states the tool solves 2D sketch constraint sets, specifying the action and resource. The repetition 'Solve a 2D sketch constraint set' reinforces purpose but is slightly redundant. Distinct from siblings like solve_mates or add_constraint.
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?
Explicitly says 'Use this when you need to solve a 2D sketch constraint set,' providing clear context. Does not mention when not to use it or compare to alternatives, but the use case is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_from_imageTrace Outline from ImageAInspect
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 + LLM-labeled named points). Default backend is auto — the tool picks based on the image's corner-color stddev. Accuracy honesty: opencv contour is geometrically exact; vision-LLM is typically 5–10% off on dense landmarks. Per-feature confidence is reported. Caller pays for any vision-LLM API spend via their own ANTHROPIC_API_KEY. Pair with the kernelcad-trace-from-image skill for the conversion-to-mm pipeline.
| Name | Required | Description | Default |
|---|---|---|---|
| hint | No | Optional free-text hint forwarded to vision-LLM backends (e.g. "a pair of eyewear; trace the upper brow only"). | |
| backend | No | Force a specific backend; default `auto` routes by corner-color stddev. | |
| features | No | Features to trace. Defaults to a single { label: "silhouette", kind: "silhouette" } when omitted. | |
| imageUrl | Yes | URL or path to the reference image. Supports file://, http(s)://, data:image/...;base64,..., or a bare filesystem path. | |
| maxWaypointsPerFeature | No | Cap on waypoints per feature. Defaults to 12 (suitable for medium-inflection outlines). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses backend behavior, accuracy differences (opencv exact, LLM 5-10% off), confidence reporting, caller payment responsibility, and pairing with skill. Annotations only say not readOnly, but description adds extensive behavioral detail.
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?
Front-loaded with usage guidance. Multiple sentences but each adds value (backends, accuracy, skill pairing). Could be slightly more concise but justified by 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?
No output schema, but description explains output includes confidence and waypoints, and mentions conversion pipeline. Covers backends, accuracy, and caller obligations. Adequate for a complex tool with 5 params.
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 all parameters with descriptions. Description adds context on backend selection logic (corner-color stddev for auto) and how hint/region are used, enhancing understanding beyond 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 it traces features from a reference photo into waypoints. It distinguishes from sibling tools by detailing backend dispatch and pairing with a specific skill.
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?
Opens with 'Use this when you need to trace features...' and explains backend selection criteria. Lacks explicit when-not-to-use cases but provides sufficient context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifyVerify DesignARead-onlyInspect
Use this when you need to check a design against a rule set. One verifier, selected by check:
'assembly' — mate-aware assembly validator on the active session (run evaluate_script first).
'urdf' — structural validity of a .urdf file ({ urdf_path }).
'dfm' — print-readiness gates declared by dfmSpec() ({ file | code }).
'dfm-preflight' — sheet-metal flat pattern vs a job-shop's ordering rules ({ vendor, material, thicknessIn|thicknessMm, ... }).
'swept-collision' — sweep declared joint range(s) and report colliding poses.
'reachable' — inverse-kinematics reachability for an end-effector ({ tip_link, target_position, ... }).
'mounting-holes' — fastened mates expose matching hole diameters on both sides.
'load-capacity' — closed-form Euler-Bernoulli beam stress / safety-factor check ({ loads, materials, ... }). All params except
checkare check-specific and forwarded verbatim; each check fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| dxf | No | check:'dfm-preflight' — path to a DXF file. | |
| code | No | Inline kernelCAD script source (same checks as `file`). | |
| file | No | Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity). | |
| mode | No | check:'load-capacity' — 'beam' (default) or 'stub'. | |
| seed | No | check:'reachable' — numeric IK seed pose (joint name -> deg/mm). | |
| check | Yes | Which verification to run. | |
| joint | No | check:'swept-collision' — joint to sweep; omit to sweep every declared joint. | |
| loads | No | check:'load-capacity' — partName -> { force?: [Fx,Fy,Fz] N, torque?: [Tx,Ty,Tz] N*m }. | |
| range | No | check:'swept-collision' — [lower, upper, step] in joint-native units. | |
| vendor | No | check:'dfm-preflight' — vendor SKU (required for that check). | |
| service | No | check:'dfm-preflight' — service. | |
| assembly | No | Assembly name; defaults to the first captured assembly. | |
| material | No | check:'dfm-preflight' — material SKU (required for that check). | |
| tip_link | No | check:'reachable' — end-effector part name (required for that check). | |
| featureId | No | check:'dfm-preflight' — FeatureId to scope to. | |
| materials | No | check:'load-capacity' — partName -> material declaration. | |
| urdf_path | No | check:'urdf' — path to the .urdf file. | |
| thicknessIn | No | check:'dfm-preflight' — material thickness in inches. | |
| thicknessMm | No | check:'dfm-preflight' — material thickness in millimeters. | |
| prefer_solver | No | check:'reachable' — force the IK path ('auto' default). | |
| max_iterations | No | check:'reachable' — numeric-path iteration cap. | |
| refreshCatalog | No | check:'dfm-preflight' — force vendor catalog refresh. | |
| target_position | No | check:'reachable' — target [x, y, z] mm (world frame). | |
| target_orientation | No | check:'reachable' — target XYZ Euler angles in radians. | |
| position_tolerance_mm | No | check:'reachable' — position tolerance in mm. | |
| collision_tolerance_mm3 | No | check:'swept-collision' — BREP intersection volume tolerance (mm^3). | |
| safety_factor_threshold | No | check:'load-capacity' — pass/fail safety-factor floor (default 1.5). | |
| orientation_tolerance_rad | No | check:'reachable' — orientation tolerance in radians. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing that params are check-specific and forwarded verbatim, and that each check 'fails closed on its own missing required params'. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and front-loaded purpose. It is somewhat long due to the number of checks, but each check is concisely described. Could be slightly more terse but still efficient.
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 28 parameters and 8 distinct checks, the description covers all checks and their parameter dependencies. It lacks detail on return values (no output schema), but the behavior per check is adequately described. Overall very complete for the 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?
With 100% schema coverage, baseline is 3. The description adds significant value by grouping parameters per check, indicating which are required for each check, and explaining the forwarding behavior. This helps the agent understand parameter relationships 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 states the tool's purpose clearly: 'check a design against a rule set'. It lists 8 distinct check types with one-liner descriptions, directly differentiating from siblings like evaluate_script (explicitly mentioned as a prerequisite for 'assembly'). The verb 'verify' and resource 'design' are 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 check-specific usage context (e.g., 'run evaluate_script first' for assembly), but does not explicitly state when NOT to use or compare to alternatives. The guidance is sufficient for the intended use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
why_did_this_failExplain FailureARead-onlyInspect
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? }.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| file | No | ||
| feature_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by explaining the tool walks the upstream chain in topological order and returns inline hints. 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 relatively concise, packing purpose, behavior, return format, and a note about an alternative into three sentences. It front-loads the usage context and maintains focus, though the parameter list at the end could be integrated more smoothly.
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 no output schema, the description covers return format (diagnostics chain, topological order, inline hints) and guides toward lookup_diagnostics for full details. However, it omits edge cases like what happens if the feature has no failure, prerequisites (feature must exist?), or error conditions.
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 0%, requiring the description to compensate. However, the description merely restates parameter names in a list ('Pass { file?, code?, feature_id? }') without explaining their meaning or how they influence the output. This adds minimal semantic value.
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 uses specific language ('trace why a feature failed') and clearly identifies the resource (failure diagnostics chain). It distinguishes itself from sibling lookup_diagnostics by noting that this tool returns upstream chain diagnostics while the sibling provides the full catalogue.
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?
Explicitly states when to use ('when you need to trace why a feature failed') and provides an alternative via sibling lookup_diagnostics. While it doesn't list explicit exclusions or prerequisites, the guidance is clear enough for an agent to decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!