kernelcad
Server Details
Agent-first CAD: editable .kcad.ts source, deterministic review, OpenCASCADE kernel.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- w1ne/kernelCAD-web
- GitHub Stars
- 14
- Server Listing
- kernelCAD
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 44 of 44 tools scored. Lowest: 3.3/5.
Tools are mostly distinct, with clear descriptions for each. However, there is some potential overlap between inspection tools like 'inspect' and 'mesh_summary', and between rendering tools 'render_preview' and 'get_latest_render', which could cause minor confusion.
All tool names follow a consistent snake_case verb_noun pattern, making it predictable for an agent to infer functionality.
44 tools is significantly higher than the typical well-scoped range of 3-15. While the domain is complex, the count feels excessive and could overwhelm an agent.
The tool set covers an extensive range of CAD operations including creation, inspection, rendering, export, and verification. Minor gaps exist, such as direct sketch editing tools, but overall it is comprehensive.
Available Tools
45 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 a structured ConnectorOrigin. | |
| part_binding | Yes | JS identifier bound to an AssemblyPartRef, e.g. "basePart". |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states 'side-effect-free', matching the destructiveHint=false annotation. Also explains the return value (modified source + diagnostics), adding 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 concise sentences plus a code snippet. Purpose is front-loaded, and every element is useful 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 output schema exists (not shown, but indicated), the description adequately covers the return value. The tool's complexity is moderate, and the description provides sufficient context for an 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 high (86%), so baseline is 3. The description provides a code snippet showing parameter usage, but does not add detailed semantics beyond what the schema already describes.
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 adds a mate connector to a part, with a specific code insertion example. This distinguishes it from siblings like add_constraint or add_feature.
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 this tool (adding a mate connector to a part) and mentions side-effect-free. However, no explicit comparison or when-not-to-use guidance is given.
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 | The constraint to append. | |
| constraints | No | Existing constraint list to append to (omit for an empty list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| errors | No | Validation errors (present on failure). |
| constraints | Yes | Updated constraint list. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explicitly states 'Side-effect-free' which aligns with destructiveHint=false. It explains the tool returns the updated list, indicating no mutation of inputs. This adds valuable 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, no redundant words. Front-loaded with purpose. Every sentence contributes 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?
Given the tool has 2 parameters, nested objects, and output schema, the description covers purpose, usage pattern, and side-effect-free behavior. It does not detail output format, but output schema exists. Minor gap: could mention the output is a new list.
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%. Description adds meaning by explaining the role of each parameter: 'constraints' as existing list (omit for empty), 'constraint' as the one to append. Also mentions 'validated' which hints at input validation.
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 'add' and resource 'sketch constraint to a list'. It distinguishes from siblings by specifying the domain (sketch constraint) and the action (appending to a list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: 'Use this when you need to add a sketch constraint to a list.' It also provides usage pattern: 'pass { constraints, constraint } and receive the updated list.' It does not mention 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.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the insertion location, return format (modified code + diagnostics), validation behavior ('fails closed'), and claims 'side-effect-free'. Annotations provide readOnlyHint=false and destructiveHint=false, so the description adds valuable behavioral context beyond those.
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-loads the primary use case. It is comprehensive but not verbose; all sentences add value. Minor length could be trimmed, but it remains 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 (10 params, two kinds, nested objects) and minimal annotations, the description covers the two paths, required params, return type, and consumption. It lacks explicit error details but mentions 'fails closed'. The output schema exists, so return values need not be explained.
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 the description enriches parameter meanings by explaining kind-specific details (e.g., defaults, structure of Hermite endpoints, that controlPoints are in mm). This goes beyond the basic 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 specifies a clear action (authoring a 3D Curve3D) and resource (user's .kcad.ts file) with precise placement. It distinguishes the two kinds (nurbs and hermite) and differentiates from siblings by naming consumption tools like add_variable_sweep and add_surface.
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 author a 3D Curve3D', providing explicit context for when to use the tool. It explains how to consume the result with other tools but does not state when not to use it or explicitly name alternatives, though the function is specific enough.
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);`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: insertion location, return of modified code plus diagnostics, and side-effect-free claim. Annotations indicate not read-only and not destructive, which aligns with the description's side-effect-free assertion (no permanent state change).
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, with a clear front-loaded usage statement. The third sentence about faceLabels and lookup_api is relevant but somewhat tangential; it could be separated. Overall, 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?
Given the presence of an output schema and annotations, the description covers key aspects: insertion logic, return value, side-effect-free nature, and an advanced tip. It could mention edge cases (e.g., no return statement) but is sufficient for typical usage.
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 both parameters. The description adds an example for feature_code, clarifying the expected format and syntax beyond the schema's 'Single-statement source line to insert'. This provides practical guidance.
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 'new feature line into a script', with precise location 'before the last top-level return statement'. This distinguishes it from sibling tools like add_constraint or add_part, which add different script elements.
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 insert a new feature line into a script', providing a clear use case. It also mentions side-effect-free behavior and a tip about faceLabels, but does not explicitly exclude when not to use it or compare to alternatives like add_connector.
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(...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the tool is not read-only and not destructive. The description adds that it 'durably edit source' and requires code and assembly_binding, plus states that each relation 'fails closed on its own missing required params', providing useful behavioral insight 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 concise (about 10 lines) with a clear front-loaded purpose statement and bullet-pointed breakdown of the three relation types. Every sentence adds value without redundancy. It is well-structured for quick comprehension.
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 (three distinct operations with many parameters), the description sufficiently covers all key aspects: the three relation types, their parameter shapes, common required params, and error behavior. An output schema exists so return values need not be described. The description stands alone as a complete guide for an AI 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%, so baseline is 3. The description groups parameters by relation type (e.g., 'mate' expects { name, a, b, type, pose?, ... }), which adds structural meaning not explicit in the schema's conditional required blocks. It also explains that non-relation parameters are 'forwarded verbatim', clarifying how to use them.
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 mate-graph relationship into the source'. It breaks down into three specific relation types (mate, coupling, transmission) with distinct parameter sets. This distinctively distinguishes it from sibling tools like add_constraint 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 opens with 'Use this when you need to author a mate-graph relationship', providing clear usage context. It mentions required parameters (code, assembly_binding) and the default relation. However, it does not explicitly compare to alternatives or state when not to use the tool.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the side-effect-free nature ('caller persists the returned source') and explains that it returns modified source plus diagnostics. This goes beyond the annotations (destructiveHint=false, readOnlyHint=false) by clarifying the exact behavioral impact.
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: first states purpose, second explains the exact insertion, third clarifies side-effect-free. Every sentence earns its place with 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?
Given the complexity (6 parameters, all documented in schema) and the existence of an output schema, the description fully covers what the tool does and its constraints. The return behavior (modified source + diagnostics) is clearly stated.
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?
All 6 parameters have descriptions in the schema (100% coverage). The description does not add further meaning to individual parameters beyond what the schema provides, so baseline 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?
Clearly states the verb 'add' and resource 'part to an assembly'. Describes the specific action of durably inserting a code line before the final return, distinguishing it from other add_* 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 says 'Use this when you need to add a part to an assembly', providing clear context. Does not mention when not to use or alternatives, but the sibling tools are numerous and distinct.
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; pen ends at b.point. | |
| 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false). The description adds significant value by stating it is 'Side-effect-free', 'fails closed on missing params', and returns modified code with diagnostics. It does not detail idempotency or concurrency, but the added context is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, but somewhat lengthy due to detailed kind breakdowns. It could be slightly more concise, but each sentence earns its place by providing necessary constraints and examples.
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 (3 kinds, 14 params, nested objects, output schema), the description is comprehensive: explains insertion point, pen position constraints, return value, and kind-specific details. The existence of an output schema reduces need to describe return format.
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 substantial meaning beyond schema: for spline, it explains interpolation, tangent normalization; for nurbs, the B-spline net; for hermite, tangent magnitude meaning. These enrich parameter understanding without redundancy.
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 appends a curved segment to an existing PathBuilder chain, specifies the three kinds (spline, nurbs, hermite) with code examples and constraints, and distinguishes itself from sibling tools like add_curve by focusing on path segment appending.
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 append a curved segment to an existing PathBuilder chain' and provides guidance on when to use each kind (e.g., 'Use for organic 2D outlines'). However, it lacks explicit when-not-to-use or comparison with sibling tools like add_curve, limiting differentiation.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side-effect-free nature, return value (modified code + diagnostics), pattern implementation as cumulative boolean union, and face ref naming convention. Annotations are consistent (readOnlyHint false, 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?
The description is a single well-structured paragraph, front-loading the core purpose, then covering insertion behavior, returns, side-effects, and geometric notes. Slightly verbose but each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, nested objects, output schema exists), the description covers return value, side-effect-free nature, pattern unit concept, geometric implications, and face ref naming. It is complete for correct agent usage.
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 86%, so the schema already documents most parameters. The description adds value by explaining the role of 'target', 'assign_to', and the return value, but does not re-iterate all schema 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?
The description clearly states it repeats a feature in a pattern by inserting a pattern call into a script. It distinguishes from siblings like add_feature (general feature addition) and flatten_pattern (different operation).
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 repeat a feature in a pattern' and provides context on when each pattern kind is appropriate via the schema. Also gives guidance on additive vs subtractive features.
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, bottom/right/top/left order). 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate mutation without destruction. Description adds crucial details: slice-1 limitation (weights ignored), surfaces are non-rational, no Shape until chaining .thicken() or .toShape(), returns code + diagnostics, and each kind fails closed on missing params. This far exceeds annotation coverage.
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-organized with a clear lead sentence and separate paragraphs for each kind. It is fairly long but each sentence adds information. Slightly verbose but not redundant; earns its length.
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 12 parameters, two modes, nested objects, and an output schema, the description covers prerequisites, limitations, behavioral nuances, and post-creation steps. It mentions the need for declared curve_bindings and the chaining with add_feature, leaving no major 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 each parameter described. Description adds significant value by grouping parameters by kind, explaining defaults (knots, sampling, continuity), constraints (adjacent endpoints must coincide within 1e-6 mm), and side effects (ignored weights). It also clarifies the control-point grid shape and curve_bindings order.
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 clearly states the tool authors NURBS surfaces with two distinct paths selected by 'kind'. It specifies the exact function calls generated (nurbsSurface, surfaceFromCurves, surfaceFromBoundary) and differentiates from sibling tools like add_curve or add_feature by focusing on surface creation.
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?
Description opens with 'Use this when you need to author a NURBS Surface' providing clear context. It explains each kind's sub-usage but does not explicitly list when not to use or alternative tools, though the specificity implies limited applicability.
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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, meaning the tool modifies code but is not destructive. The description adds context about the default font, side-effect-free behavior, and return of modified code plus diagnostics, which enhances 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 concise and well-structured, starting with a clear purpose then detailing modes. It avoids fluff but could be slightly more compact.
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 (17 parameters, 2 modes, output schema exists), the description covers the main behaviors and parameter groups. However, it lacks explicit guidance on parameter dependencies or mutual exclusivity, which 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 100% with clear descriptions for each parameter. The tool description adds narrative grouping by mode and clarifies defaults, but this adds limited value beyond the schema's already-detailed parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for authoring text into a kernelCAD script, and distinguishes between two modes (sketch and emboss) with specific actions for each. This provides a clear verb+resource purpose and differentiates 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?
The description explicitly explains when to use each mode (e.g., 'sketch' for chainable text, 'emboss' for engraved/raised features) and mentions failure modes. However, it does not provide explicit guidance on when not to use the tool or compare alternatives.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: it states 'Side-effect-free', explains validation via regex ('fast structured error vs capture-time stack'), and notes that orientation is not exposed. This adds value beyond the annotations (`readOnlyHint: false`, `destructiveHint: false`), and there is 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 fairly concise and front-loaded with the use case. It includes relevant technical details without excessive verbiage. Minor jargon could be reduced, but overall it is 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?
Given the complexity (6 parameters, output schema exists), the description is complete. It covers the return type (modified code + diagnostics), validation, binding references, constraints on sections, and the limitation about orientation. The output schema is mentioned implicitly by describing the result as a `Shape`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining that `spine_binding` references an existing variable, `sections` must be strictly increasing in `t` and span [0,1], and that the result is a `Shape` for chaining. These details enhance understanding 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's purpose: authoring a variable-section sweep along a spine. It specifies the action (insert a `variableSweep` declaration), the resource (`.kcad.ts` file), and the result (a `Shape`). The mention of chaining with `add_feature` differentiates it from sibling tools that handle other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you need to author a variable-section sweep along a spine' and provides context like inserting before the last top-level return. While it doesn't explicitly state when not to use, the context is clear. No direct alternatives are named, but the specificity implies this is for sweeps only.
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(...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool 'Durably insert[s]' code, indicating a permanent modification, and returns 'modified source plus diagnostics.' This adds context beyond the annotations (which only indicate not read-only and not destructive). The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the usage directive, and every sentence adds value. It is concise and well-structured 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 an output schema and is moderately complex (5 params), the description fully covers the purpose, usage, return value (modified source plus diagnostics), and behavioral context (checked by validation gates). It is complete for an AI agent to understand how 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?
The input schema has 100% coverage with descriptions for all 5 parameters. The tool description does not add any additional explanation beyond what the schema already provides. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'declare a reachability target for a connector.' It specifies the action (insert a workspace target) and the resource (connector). This clearly distinguishes it from sibling tools like 'add_constraint' 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 starts with 'Use this when you need to...', providing clear context for when to use the tool. It explains that workspace targets are checked by validation gates. However, it does not explicitly state when not to use it or mention alternatives, slightly reducing the guidance.
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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| fps | No | |
| error | No | |
| verified | No | Whether pose-interference verification passed. |
| errorCode | No | |
| errorHint | No | |
| collisions | No | Colliding poses { t_ms, a, b, volume_mm3 }. |
| diagnostics | Yes | |
| duration_ms | No | |
| frame_count | No | |
| output_path | No | Written MP4 path (MP4 mode). |
| failure_kind | No | |
| verify_skipped | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide limited info (readOnly=false, destructive=false). Description adds extensive behavior: collision verification, non-blocking collision handling (artifact still written), environment prereq, and return structure. Contradicts none.
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 long but each sentence adds value. Front-loaded with purpose. Some redundancy (environment requirement repeated) but overall efficient for 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?
Covers all aspects: purpose, parameters, environment, return format, behavioral nuances. With output schema present, description still adds return structure details. Complete for an 8-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 coverage is 100%, but description adds significant context: file parameter emphasizes no code mode, focus/hide explains mutual exclusivity and render-only semantics, frames_dir/output_path mutual exclusivity, verify_every union with keyframe sample set. Greatly enhances 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 render a script's animation timeline to a video.' It specifies capture of animationView({...}) to MP4 or PNG frames, with a clear verb-resource relationship. It distinguishes from sibling tools like render_preview by focusing on animation capture.
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 usage context: 'FILE ONLY: pass { file }' and 'no { code } mode.' Explains mutually exclusive options and environment requirements. Does not explicitly mention when not to use or alternatives, but the context is sufficiently clear.
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? } — provide file or code (at least one). 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| goal | Yes | Echoed design goal. |
| record | No | Studio-compatible build record (when requested). |
| attempts | Yes | Per-attempt review results. |
| recordUrl | No | |
| finalAttemptId | No | |
| nextActionPrompt | No | |
| outputRecordPath | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, openWorldHint=false, destructiveHint=false. The description adds behavioral context: it iterates over attempts, uses review_cad, can write build records, and returns structured repair prompts. This complements the annotations effectively.
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 four concise sentences front-loaded with when to use. Every sentence adds value, and there is no redundancy or filler.
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 high number of parameters (16) and nested objects, the description provides a good high-level process. The schema covers most parameters and the output schema exists, so the description does not need to detail return values. Slightly more detail on the loop termination condition would enhance 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?
The schema covers 94% of parameters with descriptions, so the baseline is 3. The tool description does not add further meaning beyond what the schema provides, so no extra credit.
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 action: 'run a CAD design loop over multiple attempts.' It specifies the process (review, continue, return repair prompts, optionally write build record) and distinguishes it from sibling tools like review_cad and individual add_* tools by its loop/orchestration nature.
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 run a CAD design loop over multiple attempts,' providing clear context. However, it does not explicitly state when not to use it or suggest alternatives, which would improve guidance.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| base | No | Baseline summary { featureCount, partCount, isAssembly } (success). |
| side | No | Which side failed ('base' | 'revised') (failure). |
| error | No | Failure message (failure). |
| mates | No | Mate-graph changes (success). |
| parts | No | Per-part added/removed/renamed/changed/unchanged (success). |
| params | No | Param value/min/max changes (success). |
| revised | No | Revision summary { featureCount, partCount, isAssembly } (success). |
| errorCode | No | |
| diagnostics | No | |
| interference | No | Total interference-volume delta + per-pair detail (success). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the output format comprehensively (per-part changes, interference delta, mate-graph changes, param changes) and explicitly confirms it is read-only, aligning with annotations readOnlyHint=true and destructiveHint=false. It also addresses an edge case (single-shape scripts). This adds significant value 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 concise and well-structured. It starts with the usage context, then explains the output in detail, and ends with usage guidance and safety confirmation. Every sentence provides useful information 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?
Given the tool's complexity (multiple output components, 4 parameters), the description covers all essential aspects: usage timing, input pairing, output details, read-only nature, and edge cases. The presence of an output schema reduces the burden, but the description still provides a clear summary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with parameter descriptions. The description adds value by explaining the relationship between parameters: 'a baseline ({ baseFile } or { baseCode }) and a revision ({ file } or { code }).' This clarifies how to pair the parameters, which is not evident from the schema 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: 'see exactly what changed between two script versions.' It uses a specific verb ('diff') and resource ('script versions'), distinguishing it from sibling tools which are for building or querying CAD models, not comparing versions.
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 usage guidance: 'Use after editing a script to verify exactly what changed physically before re-rendering.' It also states the tool is read-only and never touches the active session. However, it does not explicitly mention when not to use it or suggest alternative tools, but the context is sufficient given the tool's specificity.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the script compiled and lowered cleanly. |
| parts | No | Assembly parts summary { count, names } when the scene is assembly-built. |
| dryRun | No | True when the result came from a fast dry run. |
| diagnostics | Yes | |
| featureCount | Yes | Number of features captured by the script. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description indicates full run modifies the active session ('finish with a full evaluate_script before using session-dependent tools'), but annotations declare readOnlyHint=true, implying no side effects. This is a contradiction, so score 1 per instructions.
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?
Well-structured: purpose first, then outputs, then parameter usage, then dryRun details. Slightly verbose but front-loaded with essential information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, inputs, outputs, and special behavior (dryRun). Output schema exists, so return values need not be described. Despite the annotation contradiction, the description itself is complete for agent usage.
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 explaining the mutual exclusivity of 'file' and 'code', and the purpose of 'dryRun' beyond the schema description. It clarifies usage context for each parameter.
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 starts with 'run a script and check it compiles' and details specific outcomes: pass/fail, feature count, diagnostics, and optional parts summary. This clearly distinguishes it from sibling tools like verify or why_did_this_fail.
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?
States when to use: 'Use this when you need to run a script and check it compiles.' Also explains dryRun for fast validation and when to use full run ('finish with a full evaluate_script before using session-dependent tools'). Does not explicitly mention 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.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| aabb | No | Axis-aligned bounding box of the field (success). |
| hint | No | |
| kind | No | SDF field kind (success). |
| error | No | |
| inside | No | Whether the point is inside the surface (success). |
| distance | No | Signed distance in mm; negative = inside (success). |
| errorCode | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, meaning no destructive behavior. The description adds details about the return format and the meaning of distance values, which goes beyond annotations. No contradiction detected.
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 well-structured sentences, each earning its place. The first sentence is a clear purpose statement, the second explains output, the third gives usage hints. Slightly verbose but remains 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 the presence of an output schema and 100% parameter coverage, the description provides sufficient context: input relationships, output structure, usage hints, and a comparison to a sibling. Minor missing details about error conditions are acceptable.
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 parameters are documented. The description adds value by hinting that file and code are mutually exclusive ('either...or') and explaining that fieldName refers to an sdf.bind binding. This clarifies usage 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 samples a signed-distance field at a point, specifies the return object, and distinguishes it from the expensive sdf.materialize sibling. The verb 'sample' and resource 'signed-distance field' 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 explicitly says when to use it (to verify SDF composition before materialization) and mentions the prerequisite of binding the SDF field. It does not list alternative tools among siblings but provides enough context to avoid misuse.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| format | No | |
| written | No | target:'part' — per-part export records. |
| byte_count | No | target:'model' — file size in bytes. |
| mesh_files | No | Per-link mesh files for urdf/sdf-gazebo exports. |
| diagnostics | No | |
| output_path | No | target:'model' — written file path. |
| feature_count | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond annotations. It discloses default watertight verification, error return patterns (export.mesh.not-watertight, export.part.not-found), and file writing behavior (still written on verification failure). It also explains side effects like writing mesh files for URDF/SDF targets. 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 detailed but well-structured with clear bullet points for each target and sub-points for formats. It is front-loaded with the main purpose. While long, the complexity of the tool (10 parameters, nested options) justifies the length. Minor denseness prevents a 5.
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 (10 params, nested options, output schema), the description covers all necessary aspects: purpose, usage, parameter semantics, behavioral traits, error conditions, and side effects. It is complete for an AI 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?
With 100% schema coverage, the description still adds significant meaning: it explains conditional parameter requirements based on 'target', describes the per-format options bag in detail, and clarifies the role of 'no_verify'. 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's purpose: export geometry to a file. It distinguishes two targets ('model' and 'part') with distinct behaviors, providing a specific verb+resource combination. No sibling tool overlaps with this export functionality, making it easy to select.
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 export geometry to a file' and provides detailed guidance on when to use each target ('model' vs 'part'). It also explains optional parameters, per-format options, and error conditions, giving clear context for invocation.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| record | No | Resolved part record (success). |
| sha256 | No | SHA-256 fingerprint of the STEP file (success). |
| source | No | Where the part came from ('local' | 'remote') (success). |
| cachePath | No | Local cache path of the written STEP file (success). |
| errorCode | No | |
| errorHint | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: bundled ids resolve offline, non-bundled ids require partsBaseUrl, and the return value includes cache path and sha256 fingerprint. This explains the caching mechanism and external dependency, which annotations alone do not capture.
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 (four sentences) and front-loaded with the primary use case. Every sentence adds value: when to use, resolution logic, offline vs online behavior, and return format. No redundant or wasteful text.
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 provides enough information to use the tool for its main purpose, covering id/query resolution, bundled vs non-bundled, and return values. However, it leaves gaps: the roles of 'family', 'category', and 'standard' are unexplained, and it does not clarify whether id and query can both be provided or their interaction. Given the low schema coverage and 6 parameters, the description is adequate but not fully 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 description coverage is only 17% (only partsBaseUrl has a description). The description explains the roles of 'id' and 'query' (resolve an id or single-match query), but does not address 'family', 'category', or 'standard' parameters. These remain ambiguous—whether they are part of the query or separate filters is unclear. With low coverage, the description should have compensated by detailing all parameters, but it only covers two out of six.
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 download a catalog part as a STEP file. It specifies the action (download/fetch) and the resource (catalog part STEP file), and distinguishes from siblings like find_part (search) and add_part (adding parts) by focusing on file download. The verb 'fetch' combined with 'download a catalog part as a STEP file' 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 provides clear context on when to use the tool: 'Use this when you need to download a catalog part as a STEP file.' It also explains the resolution mechanism (id vs single-match query) and the difference between bundled and non-bundled ids with partsBaseUrl. However, it does not explicitly exclude alternative tools (e.g., find_part for searching or add_part for placement) or provide when-not-to-use guidance, which would improve clarity.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| source | No | Where results came from ('local' | 'remote') (success). |
| results | No | Matching part records (success). |
| errorCode | No | |
| errorHint | No | |
| totalMatches | No | Total matches before limiting (success). |
| remoteEnabled | No | Whether the remote tier was queried (success). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, and the description does not contradict these. It adds behavioral details like token AND-combination and cross-facet filtering, exceeding annotation coverage.
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 three sentences that front-load purpose, then explain filtering logic, then remote tier setup. 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 presence of an output schema, the description covers the main functionality: search, filtering, and remote option. It is fairly complete for a search tool, though more detail on each filter parameter 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?
With only 13% schema description coverage, the description partially compensates by mentioning 'fuzzy query' (query), 'faceted filters' (category, family, etc.), and 'source' enum. However, parameters like 'tag' and 'standard' are not explained, leaving 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 tool finds a part in the catalog using fuzzy query and faceted filters. It specifies the verb 'find' and resource 'part in catalog', and distinguishes from siblings like 'fetch_part' by describing the search functionality.
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 find a part in the catalog' and explains search behavior (AND-combine) and remote tier option. However, it does not specify when not to use it or mention alternatives like 'fetch_part'.
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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| region | No | Unfolded flat-pattern Region (outer polyline + holes + bend lines + plane). |
| diagnostics | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the read-only nature (consistent with readOnlyHint annotation) by describing the output as an unfolded pattern. It adds behavioral details such as the output format and bend limit. No contradictions 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 at two sentences, front-loading the use case. The phrase 'Slice 1: at most 2 bends' is slightly unclear and could be reworded for better clarity. Overall, it is efficient but has a minor clarity issue.
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 core functionality and output, but it does not explain the term 'Slice 1', nor does it address edge cases like more than 2 bends or error scenarios. No information on prerequisites or permissions is provided. The presence of an output schema reduces the need for output details, but the description could be more 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 0%, so the description must compensate. It explains that 'file' and 'code' are alternative input methods, and 'featureId' is optional to select a specific shape. However, it does not describe the expected formats of 'file' or 'code', nor does it clarify that all parameters are optional. This leaves 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?
The description clearly states the tool's purpose: to obtain the unfolded flat pattern of a bent sheet-metal part. It specifies the output format (Region with polylines, holes, bend lines, sketch plane) and a constraint (at most 2 bends). This distinguishes it from sibling tools that focus on adding features or 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?
The description tells when to use the tool ('when you need the unfolded flat pattern') and how to specify input (using 'file' or 'code', with optional 'featureId'). It implies a limitation to sheet-metal parts with up to 2 bends. However, it does not explicitly mention when not to use it or recommend alternatives from the sibling tool list.
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
Render a project's current model server-side and return it as an inline image so you can SEE what you built. Use this after open_in_studio (or any /p/ link): call with that slug to inspect whether the build looks right. CRITICAL — the image is rendered from the MODEL on the server; it does NOT reflect the user's Studio camera, zoom, or screen. NEVER ask the user to rotate, zoom, pan, move the camera, close a slider, or change their view to help you see — you cannot affect their screen and it cannot affect this render. To see a different angle, call this tool again with a different view. By DEFAULT (omit view, or view:"all") it returns a CONTACT SHEET of all six canonical views in one labeled image — a 3×2 grid, top row [iso, front, right], bottom row [back, left, top] — so you can judge the model from every side regardless of its orientation (e.g. to find which side has the doors). Pass a single view (iso/front/back/left/right/top) for one large render of that angle. DETERMINISTIC: the same model + view always returns the same bytes — identical bytes are NOT a stale/lagging snapshot. If you changed the model, push it with open_in_studio FIRST, then re-render to see the change. The image is always current and never a blank capture. Colors and shading match Studio (same palette / base-material color). The slug is the capability: no OAuth for public/unlisted; private projects require the owner signed in. The PNG is base64-inlined as a real image block by default; pass paths_only: true for metadata only. No renderable geometry or a mesh failure → { ok: false, error, hint }, never a blank image.
| 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. | |
| view | No | View to render. Default "all" = a labeled contact sheet of every canonical angle (iso/front/back/left/right/top) — best for judging the whole model. Pass a single view name for one large render of that angle. | |
| paths_only | No | Controls PNG delivery. Default false: base64-inline the rendered PNG so clients that cannot fetch a URL over HTTP (e.g. a sandboxed agent) can still see it. Set true to return only metadata (smaller response). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | Whether a render was produced. |
| hint | No | Next-action hint when ok is false. |
| view | No | The view that was rendered (when ok). |
| bytes | No | PNG byte length (when ok). |
| error | No | Error code when ok is false (e.g. "empty_geometry", "mesh_failed"). |
| width | No | Rendered image edge in px (when ok). |
| height | No | Rendered image edge in px (when ok). |
| image_b64 | No | Base64-encoded PNG bytes, present when inlined (paths_only=false) and under the size cap. |
| truncated | No | Set when inline was requested but the PNG exceeded the size cap. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint annotation by detailing key behaviors: server-side rendering independent of user's Studio camera, deterministic output (same model + view = same bytes), always current and not stale, error handling (returns error object, never blank image), and color/shading consistency. It explicitly addresses potential misconceptions about staleness and blank captures.
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 (CRITICAL, DEFAULT, DETERMINISTIC). Each sentence conveys important information without redundancy. However, some details (e.g., 'slug is the capability') could be more concise without losing clarity. Overall, effective use of space.
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 (3 parameters, output schema, annotations), the description is exceptionally complete. It covers purpose, usage pattern, behavioral details, error handling, and parameter semantics. The presence of an output schema means return values don't need explanation, and the description touches on error states. No gaps evident.
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 schema covers all parameters with descriptions, the tool description adds critical context: the default 'all' view returns a labeled contact sheet with specified layout (3x2 grid), the deterministic behavior ties slug and view, and paths_only is explained in terms of use cases (sandboxed agents). This adds value beyond the 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 tool's purpose: 'Render a project's current model server-side and return it as an inline image'. It explicitly distinguishes from asking users to change their camera view, which is a common confusion. The verb 'render' and resource 'project's model' are specific, and the mention of inline image differentiates from potential sibling tools like 'render_preview'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this after open_in_studio (or any /p/<slug> link)'. It tells what NOT to do: 'NEVER ask the user to rotate, zoom, pan... you cannot affect their screen'. It also instructs to re-render after pushing changes and to call with different view for different angles. Alternatives like paths_only are explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_meshGet Model MeshARead-onlyInspect
Return the raw per-feature triangle mesh (positions/indices/normals) of a project's current model, by slug. For the in-chat 3D viewer widget to render geometry; delivered over the MCP Apps bridge. The slug is the capability: public/unlisted need no OAuth; private requires the owner signed in.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Project slug from open_in_studio/get_project. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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. Description adds beyond by specifying exact return content (positions, indices, normals) and delivery mechanism (MCP Apps bridge). 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 cover purpose, usage context, and auth. Front-loaded with the core action, zero 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 a single parameter, annotations, and an output schema (not shown), the description fully covers purpose, usage context, auth requirements, and data type. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for 'slug'. Description adds context about slug's role in capability/authorization, which is valuable beyond the schema field 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 a specific verb ('Return') and resource ('per-feature triangle mesh') and clearly differentiates from siblings like 'mesh_summary' or 'get_latest_render' by specifying raw mesh data (positions/indices/normals).
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 the tool is 'for the in-chat 3D viewer widget' and explains auth requirements based on slug visibility. Could be improved by stating when not to use (e.g., if only summary needed, use mesh_summary).
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | Whether the read succeeded. |
| code | No | Fetch mode: the full .kcad source. |
| slug | No | Fetch mode: the project slug. |
| title | No | Fetch mode: the project title. |
| assets | No | Complementary files keyed by source-relative path. |
| privacy | No | Fetch mode: the project privacy. |
| version | No | Fetch mode: the project version. |
| projects | No | List mode (no slug): the user's saved projects. |
| parameters | No | Fetch mode: the model's editable parameters. |
| updated_at | No | Fetch mode: last-updated timestamp. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by detailing that it fetches the full .kcad source and metadata, that updating the same slug live updates the user's open tab, and that private projects require OAuth. Annotations already declare readOnlyHint and destructiveHint, so the description complements them without 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 four sentences long, each providing unique information. It could be slightly more concise, but it is well-structured and front-loaded with the main 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?
Given the tool's dual mode (fetch vs list) and dependencies (OAuth, output structure), the description covers essential context. The presence of an output schema reduces the need to describe return values, so the description is adequately 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 baseline is 3. The description adds context about the slug's origin (from a listing or /p/<slug> link) and the behavior when omitted, which is helpful but not extensive.
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 fetches a specific project or lists saved projects, distinguishing between the two modes based on the slug parameter. It directly addresses the verb 'get' and the resource 'project', and provides specific use cases like reopening a saved project or browsing.
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 (to reopen a saved project or browse saved projects) and provides context about OAuth requirements for private projects and listing mode. While it doesn't explicitly mention when not to use it or list alternatives, it gives clear guidance on usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_revisionGet Project RevisionARead-onlyInspect
Fetch the exact immutable .kcad source and parameters captured at a prior open_in_studio version. Use this to read-after-write verify a release: pass the returned slug and version, then hash or inspect the returned source. Public/unlisted projects use the slug as capability; private projects require the owner's OAuth connection.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Project slug returned by open_in_studio. | |
| version | Yes | Positive immutable revision version returned by open_in_studio. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the revision was found and readable. |
| code | Yes | Exact .kcad source captured at this revision. |
| slug | Yes | Project slug. |
| assets | No | Immutable complementary-file manifest. |
| version | Yes | Immutable revision version. |
| parameters | Yes | Exact editable parameters captured at this revision. |
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 value by explaining that the source is immutable and that for private projects the owner's OAuth is required. It does not contradict annotations and adds practical context about capability-based access.
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 consists of three concise sentences, each adding essential information: definition, use case, and access details. No extraneous words; well-structured 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?
Given the 47 sibling tools (many mutations), the description fully covers when and how to use this read-only fetch tool. With an output schema present, return values need no further explanation. The description covers usage, access, and verification purpose completely.
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 both parameters. The description adds meaning by specifying that slug and version come from open_in_studio and that slug acts as a capability for public projects, exceeding 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 verb ('Fetch'), resource ('exact immutable .kcad source and parameters'), and context ('captured at a prior `open_in_studio` version'). It distinguishes this tool from siblings by focusing on read-after-write verification of a specific revision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this to read-after-write verify a release' and details how to pass slug and version. It also explains access requirements for public vs private projects, covering when and for whom the tool is appropriate.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | Whether the read succeeded. |
| error | No | Failure message (present on failure). |
| errorCode | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false. Description adds that parameters are subject-specific and forwarded verbatim, providing 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?
Bulleted list of subjects after a concise purpose statement. Each sentence earns its place; no wasted words despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 params, many subjects, output schema exists), the description covers all necessary information: subjects, parameter semantics, and usage context. No 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%, baseline 3. Description explains `of` enum values in detail and adds that other params are subject-specific, but does not add significant new meaning 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?
Starts with 'Use this when you need to read facts about a model,' clearly stating verb+resource. The broad list of subjects distinguishes it from sibling tools that add/modify/query.
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 (reading facts) and briefly explains parameter behavior ('All params except `of` are subject-specific'). Does not name 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.
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 | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| globals | No | |
| constraints | No | |
| sceneMethods | No | |
| shapeMethods | No | |
| edgeQueryKeys | No | |
| faceQueryKeys | No | |
| sketchMethods | No | |
| curve3dMethods | No | |
| surfaceMethods | No | |
| paramRefMethods | No | |
| pathBuilderMethods | No | |
| scenePartProperties | No | |
| featureKindFaceLabels | No | |
| curve3dAnalyticsMethods | 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's contribution is limited to clarifying the scope of listing. No additional behavioral traits beyond expected read-only operation. 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?
Two sentences, front-loaded with purpose. Every sentence adds value without unnecessary detail. Highly 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 zero-parameter listing tool with an output schema, the description fully covers purpose, scope, and usage. No 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?
No parameters (schema coverage 100% trivially). Description adds value by explaining what the tool returns, which is essential for an agent to understand the output. Baseline 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?
Description specifies verb 'list' and resource 'kernelCAD script-runtime surface' with detailed examples of included items (global functions, Shape methods, etc.). Clearly distinguishes from siblings like lookup_cookbook.
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?
Starts with 'Use this when you need to list...' providing explicit usage context. Mentions discovering what is callable from a .kcad.ts script. Does not explicitly state when not to use but given specificity it's clear. Lacks direct alternative references but siblings provide implicit differentiation.
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 | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | No | The authoring-skill resource URI. |
| text | No | The SKILL.md body. |
| mimeType | No | MIME type of the returned body. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. Description adds the output format (uri, mimeType, text) and confirms no input needed, providing useful context 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?
Two sentences: first states purpose concisely, second gives usage guidance. No redundancy, front-loaded with core functionality.
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 tool with safety annotations and output schema partially described, the description covers purpose, usage, and output format. Complete 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?
No parameters exist, so baseline is 4. Description explicitly states 'INPUT: none', which reaffirms the schema. No further param explanation 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 the tool returns the SKILL.md body for kernelcad-authoring conventions, specifying verb, resource, and content. It distinguishes from siblings like lookup_api and lookup_cookbook which are about different domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use this tool if the MCP client does not list resources, otherwise read the resource directly. Clearly states an alternative approach.
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"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| hits | No | Top-k matching cookbook snippets, ranked by BM25. |
| error | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the ranking method (BM25 over title/tags/keywords/trigger) and the empty result behavior, which go beyond the annotations (readOnlyHint, openWorldHint, destructiveHint). There is 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 a front-loaded purpose statement, and every sentence adds value. It includes examples and edge-case behavior without unnecessary detail.
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 is complete for a simple lookup tool: it explains the search mechanism, result handling, and use cases. With an output schema present, return value details are unnecessary.
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 covers 100% of parameters with descriptions. The tool description does not add significant new semantic meaning beyond what the schema already provides, so 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 looks up canonical pattern snippets for CAD tasks, using a specific resource (kernelCAD cookbook). It distinguishes effectively from siblings like lookup_api and lookup_authoring_skill, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('when you need a canonical pattern snippet') and provides examples and behavior if no results are found ('proceed without cookbook help'). However, it does not explicitly mention when not to use it or suggest alternative tools.
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 | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| codes | Yes | The diagnostic-code catalogue with hint templates. |
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 is a 'tiny one-shot call' and that hints are also inline on every emitted diagnostic, providing additional behavioral context beyond annotations. 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 three sentences, front-loaded with the primary use case, and every sentence adds value without redundancy. 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?
Given the tool has no parameters, clear annotations, and an output schema, the description sufficiently explains the tool's purpose and usage context. It does not need to describe return values due to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100%. According to the guidelines, 0 parameters yields a baseline of 4. The description does not add parameter info because none exist, which 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 a specific verb 'look up' (implied) and resource 'diagnostic catalogue'. It distinguishes itself from siblings by focusing on the canonical list upfront, which is not offered by other 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 explicitly says 'Use this when you need the kernelCAD 26-code diagnostic catalogue' and mentions its utility for pre-populating retry strategies. While it does not list alternative tools or when not to use it, the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_summarySummarize Mesh GeometryARead-onlyInspect
Mesh a kernelCAD .kcad.ts source server-side and return a COMPACT geometry summary — overall bounds plus, per feature, its id, kind, triangle count, and bounding box.
Use this to INSPECT a model's geometry without a viewer: confirm a part is the size/shape you expect, see how many triangles each feature contributes, or check that every feature produced geometry. This runs the full server-side OCCT pipeline (the same one the Studio renderer uses), so it evaluates modern sources (assembly, path, .material, …) that the legacy client worker cannot.
INPUT: source (required) the .kcad.ts script text; fileName (optional) a label for diagnostics; params (optional) a map of parameter-name → number overrides applied before meshing (stateless slider recompute).
OUTPUT: { ok, bounds, featureCount, features: [{ id, kind, triangleCount, bbox: { min:[x,y,z], max:[x,y,z] } }], failedFeatureIds, diagnostics }. ok is true when every feature meshed; failedFeatureIds lists features that failed to compile (and ok is then false). Raw vertex/index/normal arrays are NEVER returned — this is a summary only. To SEE the rendered model, use open_in_studio + get_latest_render instead.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Optional map of parameter-name → numeric value, applied as overrides before meshing (stateless slider recompute). | |
| source | Yes | The .kcad.ts script source to mesh. | |
| fileName | No | Optional file-name label used in diagnostics (does not affect geometry). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when every feature meshed successfully. |
| bounds | No | Overall model bounding box. |
| features | No | Per-feature summary — never includes raw mesh arrays. |
| diagnostics | No | Kernel diagnostics, if any. |
| featureCount | No | Number of features in the meshed model. |
| failedFeatureIds | No | Feature ids that failed to compile (empty when ok). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by disclosing that it runs the full OCCT pipeline (same as Studio renderer), evaluates modern sources, and never returns raw arrays. It also explains the output structure including failedFeatureIds. 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 well-structured with clear sections for action, use cases, input, and output. It is front-loaded with the core purpose. While slightly long, every sentence adds value and there is 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?
Given the presence of an output schema (referenced but not shown), the description adequately explains the output fields (ok, bounds, features, failedFeatureIds) and what is not returned. It also distinguishes the tool from siblings. It provides sufficient context for an agent to decide when to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all three parameters. The description adds context beyond the schema, such as 'stateless slider recompute' for params and clarifying that fileName is for diagnostics only. This enhances understanding of 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 meshes a .kcad.ts source and returns a compact geometry summary, listing specific use cases. It distinguishes from sibling tools by explicitly noting that raw vertex data is never returned and directing users to open_in_studio + get_latest_render for rendered views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool (inspect geometry without viewer, verify shape/size, triangle counts) and when not to (to see rendered model). It also mentions that it handles modern sources that the legacy worker cannot, giving context on its suitability.
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 render parameter controls. Each item is one control derived from the .kcad params. | |
| attachments | No | Complementary project files referenced by relative path from the .kcad source. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | Whether the model was persisted. |
| url | No | The /p/<slug> Studio link for the model. |
| slug | No | The project slug; pass it back to update this project in place. |
| updated | No | True when an existing project was updated; false when a new one was created. |
| version | No | Immutable Studio revision persisted by this call. Read it with get_project_revision using this slug and version. |
| embedUrl | No | Read-only, chrome-free /embed/<slug> viewer URL — drop into an <iframe> to embed the live model in any site or widget (no login). |
| assetHashes | No | |
| attachmentCount | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: persists the model, returns a slug for live updates, optional code reuse from evaluate_script. Annotations indicate a write operation (readOnlyHint false) and non-destructive (destructiveHint false); description adds the reuse and live-update details without contradiction. Complete transparency.
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?
Thorough but well-structured. The most important usage guidance is front-loaded, followed by parameter details. Slightly longer than necessary but every sentence contributes to correct usage. Could be trimmed by merging redundant phrases.
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 of conditional slug usage and code reuse, the description covers all operational scenarios. The existence of an output schema likely provides return value details. The live-update behavior with slug is fully explained, making the tool self-contained for an 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% with descriptions for each parameter. Description adds crucial context: code is optional and reuses last evaluated source, slug determines update vs. new project. This exceeds schema-only information, though for trivial parameters like title the description adds little.
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 a kernelCAD model and returns a link for viewing/sharing. It specifies the context ('when the user wants to SEE or share the model') and distinguishes it implicitly from siblings by focusing on a unique outcome. Could be improved by explicitly contrasting with similar tools like evaluate_script that don't persist.
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 trigger phrases and specific situations to use (after finishing a build, after each meaningful revision). Offers conditional guidance on passing slug for updates vs. omitting for new projects. Does not explicitly state when not to use or list alternatives, but the guidance is substantial and actionable.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: 'Side-effect-free; returns modified code plus diagnostics', and explains the deferred asEdge feature due to 'BRepProj_Projection not bundled'. This adds context that annotations do not 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 reasonably concise with three sentences covering purpose, usage pattern, and side-effects. It could be more structured but is efficient and front-loaded with the core action.
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, 4 required) and existence of output schema, the description covers the main usage, behavioral traits, and a key limitation. It is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100%, the description adds context for curveExpression ('Inserted verbatim as the curve: field'), asEdge ('captured but currently deferred'), and scaleMode ('scaling mode'). It does not detail every parameter but augments meaning beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'wrap a 2D curve onto a 3D face'. It provides a specific verb ('projectCurve') and resource ('Shape'), and distinguishes from siblings like add_curve by specifying the projection onto a face.
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 wrap a 2D curve onto a 3D face' and suggests pairing with .extrude(d)/.cut(...) for engraved logos. It does not explicitly state when not to use it or mention alternative tools, but the directive is clear.
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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| ref | No | mode:'resolve' — the resolved ref string. |
| chain | No | mode:'lineage' — HistoryMap walk. |
| error | No | |
| query | No | mode:'evaluate' — the resolved Query ({ ast }). |
| entity | No | mode:'resolve' — the single matched entity. |
| entities | No | mode:'evaluate' — matched entities. |
| warnings | No | |
| errorCode | No | |
| candidates | No | mode:'resolve' — near-miss candidates (failure). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds behavioral context: explains what each mode returns, parameter forwarding, and the 'expect' constraint. It does not cover potential side effects or limitations, but the annotations cover the safety profile.
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, using a bullet list for modes and clear language. Every sentence adds value, with no filler or repetition.
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 of three modes and seven parameters, the description is largely complete. It explains purpose, mode selection, and parameter roles. Since an output schema exists, not detailing return values is acceptable. Minor gaps: no mention of error conditions or response structure.
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 the description adds mode-specific parameter guidance (e.g., which params apply to each mode). This clarifies usage beyond the schema's parameter descriptions without redundancy.
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 resolves or inspects topology against a lowered geometry, with three distinct modes (evaluate, resolve, lineage) each having a specific purpose. This differentiates it from sibling tools like 'inspect' or 'evaluate_script' by focusing on querying via ref, DSL, or AST.
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 resolve or inspect topology against a script's lowered geometry' and breaks down when each mode is appropriate. However, it does not explicitly state when not to use this tool or name alternative tools from the sibling list.
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,`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims 'Side-effect-free,' but annotations set destructiveHint=true, indicating the tool has side effects (modifying code). This contradiction misleads about safety; the description does not clarify what side effects occur.
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 sentences, front-loaded with 'Use this when...', no wasted words. All information is essential and well-ordered.
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 output schema and annotations, the description covers key behavior: returns modified code and diagnostics, refuses to remove return line. Missing details on match uniqueness failure, 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?
Schema coverage is 100% and already includes descriptions for both parameters. The description adds only a usage context but no new semantic meaning beyond the schema examples.
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 removes a feature line from a script, specifying the verb (remove) and resource (feature line). It distinguishes from sibling tools like add_feature by its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you need to remove a feature line from a script,' providing clear usage context. However, it does not explicitly mention when not to use or alternatives, though siblings imply absence of add-like behavior.
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 as an array, e.g. ["iso"] or ["front","top"] (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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the preview rendered. |
| error | No | |
| bounds | No | Model AABB in mm { min, max } the camera was fit to (success). |
| images | Yes | Rendered tiles { name, path, description } — absolute local PNG paths with per-view camera orientation (kernelCAD is Z-up). |
| out_dir | No | Directory holding the PNGs (session temp dir unless out_dir was given). |
| errorCode | No | |
| errorHint | No | |
| mechanism | No | Mechanism-truth verdict: 'real' | 'broken' | 'unverified'. |
| render_ms | No | Wall-clock render time in ms (provisioning + browser + captures). |
| diagnostics | Yes | |
| render_source | No | Lane that served the render: 'static-player' | 'dev-server' | 'explicit'. |
| mechanism_failure_codes | No | De-duplicated failure codes when mechanism is 'broken'. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description adds extensive behavioral details: it writes PNGs to disk (local paths, temp dirs), requires playwright chromium, runs mechanism truth (with watermark on failure), and explains that paths are local-machine only. It also clarifies behavior under KERNELCAD_RENDER_STRICT=1 and no_mechanism_check. 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 comprehensive but verbose, repeating 'NO STUDIO / DEV-SERVER REQUIRED' and including some details that could be streamlined. It uses bold for emphasis and front-loads the main purpose, but could be tightened without losing meaning. Adequate but not excellent in 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?
Despite 13 parameters and a rich output schema, the description covers all essential aspects: environment dependency (playwright), mechanism check behavior, local path handling, fallback logic for base_url, and return format (images with per-view descriptions). It leaves no major gaps for an AI agent to understand what the tool does and what to expect.
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, baseline is 3. The description adds extra meaning for key parameters: explains pose format ('az,el' with rotation semantics), focus/hide semantics (mutually exclusive, same as CLI flags), and no_mechanism_check effect (ignored under strict mode). Some parameters (e.g., environment) only get minimal extra context, but overall the description significantly enriches understanding 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 starts with a clear verb-resource pair ('render a kernelCAD model to deterministic PNG views') and immediately differentiates from siblings by noting 'NO STUDIO / DEV-SERVER REQUIRED' and mentioning alternative tools for remote clients (open_in_studio). It explicitly states the tool's role in the evaluate→render→inspect→fix loop, making intent 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 explains when to use this tool (visual self-check, fast iteration) and provides context for alternatives (open_in_studio for remote clients). It covers trade-offs like skipping mechanism check for speed, but does not explicitly list scenarios where the tool should not be used. Overall, guidance is strong but slightly incomplete.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| fitness | No | Mechanism fitness verdict incl. repairMode. |
| assembly | No | |
| mechanism | No | |
| validator | No | Assembly/mate-graph validator result. |
| diagnostics | Yes | |
| featureCount | Yes | |
| poseEnvelope | No | Sampled mate-limit pose envelope. |
| repairContext | No | |
| gripperAperture | No | |
| mechanismFailures | No | |
| connectorWorkspace | No | Connector workspace bounds. |
| rawInterferencePairs | No | |
| suggestedRepairPrompt | No | Structured repair prompt (failure / repair path). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds context about the deterministic review loop, including script evaluation, assembly validation, mate checking, interference checks, and repair verdict. 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 front-loaded with usage context and is well-structured with a clear list of steps. It is reasonably concise given the complexity, though some 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 12 parameters (none required), full schema descriptions, output schema, and annotations, the description provides a comprehensive overview of the tool's behavior and return value (repair verdict). It covers the main steps and is complete for an 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 description coverage is 100%, so the baseline is 3. The description does not add parameter-specific details beyond the schema, which is acceptable since the schema already provides full descriptions for all 12 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 tool's purpose: reviewing a mechanism for fitness and repair mode. It specifies the verb 'review', the resource 'CAD model', and provides a detailed list of steps in the deterministic CAD review loop. This makes it distinct 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?
The description explicitly says 'Use this when you need to review a mechanism for fitness and repair mode,' providing clear context for use. However, it does not mention when not to use this tool or alternatives, so it lacks explicit exclusions.
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". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds critical context beyond annotations: slug-based capability (no OAuth), private projects require owner signed-in, return format with signed URLs and optional base64 inlining, and default behavior. No contradictions 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 well-structured, front-loaded with the main purpose, and each sentence adds value without redundancy. Approximately 150 words and efficiently conveys all 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?
Despite having an output schema, the description still outlines the return format (signed URLs, struck part names, optional base64). All 3 parameters are fully covered, and authentication context is provided. The description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds valuable context: explains slug as project link, paths_only default and effect, freshness_sec default and usage hints. This goes beyond the schema documentation.
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 'Return the newest brush-painted review packet from a Studio session,' specifying the exact resource and action. It distinguishes itself from siblings like 'review_cad' by focusing on painted feedback from a shared 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?
The description explains when to call with 'slug' (after sharing a /p/<slug> link) and when to omit (for own signed-in packet). No explicit when-not-to-use, but 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.
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. Either a number for a numeric param (e.g. 12.5), or a string expression evaluated in the script (e.g. "width/2 + 3"). | |
| param_name | Yes | The string literal name of the param (first arg to param()). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return values (modified code + diagnostics) and explicitly states no side effects, going beyond annotations which only provide 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?
Two focused sentences: first states purpose, second describes return and external persistence. No fluff, essential information front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and full schema coverage, description covers all necessary aspects: purpose, parameters, return, and side-effect behavior.
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?
Adds context to param_name ('first arg to param()') and provides examples for new_value, adding value beyond the 100% schema description 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?
States specific action: 'edit a param() default value in a kernelCAD script'. Distinguishes from sibling tools like add_part or remove_feature which handle other script modifications.
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 tells when to use (edit param default) and clarifies that persistence is handled externally via file-write tools, setting correct expectations.
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(...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the edit applied and re-evaluated cleanly. |
| error | No | Failure message (present when ok is false). |
| new_code | No | Modified .kcad.ts source (present on success). Caller persists it. |
| diagnostics | No | Diagnostics from re-evaluating the modified source. |
| binding_name | No | JS const name bound to the new construct (when one was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only and not destructive; the description confirms it modifies source code and re-evaluates. Adds specifics about replacing the return statement and returning diagnostics, which exceeds annotation-provided information.
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: first states purpose, second details the two return methods, third gives use-case guidance and output summary. No wasted words; front-loaded with core action.
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 5 parameters (3 required), schema coverage of 80%, and existence of an output schema, the description sufficiently explains tool behavior and return values. Slightly light on edge cases but adequate for selecting and invoking 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?
Description adds meaningful context beyond the schema's parameter descriptions: explains the difference between 'model' and 'solvedModel' modes and when to use each. For 'poses' and 'options', hints at their purpose in solvedModel, though schema already covers them. With 80% schema coverage, description still adds 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 clearly states the tool modifies the script's return statement, specifying exact substitutions (`model()` or `solvedModel()`). It uniquely identifies its function among siblings, focusing on assembly return behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use the tool ('Use this when you need to set how the script returns its assembly') and when to choose each mode ('Use solvedModel for mate-authored mechanisms'). Does not explicitly mention when not to use it, 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.
solve_matesSolve MatesARead-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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| poses | No | Solved part poses keyed by mate; each a serialized Transform (success). |
| status | No | Solver status (success). |
| errorCode | No | |
| errorHint | No | |
| iterations | No | Solver iteration count (success). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds some behavioral detail (e.g., 'Run the v0.6 mate-graph solver on the active assembly'). The description does not contradict annotations, but it adds limited extra information beyond acknowledging the read-only nature.
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, two sentences long, and front-loaded with the primary purpose. Every sentence adds value without 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?
While the description covers the return format and has an output schema, it fails to explain the 'assembly' parameter, which is crucial for context (active assembly). This omission reduces completeness for a tool with two 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?
The input schema has two parameters: 'poses' (described in schema) and 'assembly' (undescribed). The description only repeats the schema description for 'poses' and does not explain the 'assembly' parameter, leaving a gap in parameter understanding despite 50% 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?
The description clearly states the tool's purpose: 'solve the mate graph and get part poses' using the v0.6 mate-graph solver. It specifies the action (solving), the target (mate graph), and the outcome (part poses), distinguishing it from siblings like add_mate or solve_sketch.
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 solve the mate graph and get part poses,' providing clear usage context. However, it does not explicitly mention when not to use this tool or list alternative tools for similar tasks, such as solve_sketch.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| errors | No | Solver errors (present on failure). |
| entities | Yes | Solved sketch entities. |
| constraints | Yes | The constraints applied. |
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 is side-effect-free and describes input/output format, but no further behavioral details (e.g., failure modes, constraint validation).
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 efficient sentences: the first gives usage guidance, the second explains side-effect-free and data structures. No redundancy or filler.
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 annotations and output schema (not shown but described). The description covers inputs, outputs, behavior, and entity types. Adequate 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 description coverage is 100%, so the schema provides full parameter semantics. The description adds context about entity types and constraint vocabulary, but this is already evident from 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 solves a 2D sketch constraint set. It uses the verb 'solve' and specifies '2D sketch', distinguishing it from sibling tools like solve_mates (which likely handles 3D assemblies).
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 solve a 2D sketch constraint set', providing clear context. It does not explicitly mention when not to use or alternatives, but the 2D specification implies exclusivity.
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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| features | Yes | Traced features with normalized [0..1] waypoints + confidence. |
| imageDims | Yes | Pixel dimensions [width, height] of the source image. |
| diagnostics | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses multiple behavioral traits beyond annotations: three backends with dispatching logic, accuracy honesty (opencv exact, vision-LLM 5-10% off), caller pays for API, and per-feature confidence reporting. No contradiction with annotations (readOnlyHint=false, 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?
The description is a single coherent paragraph with no wasted sentences. It is front-loaded with the core use case and then provides details. However, it is somewhat lengthy and could be slightly more concise, but each sentence adds necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple backends, parameters, output schema exists), the description covers most aspects: input handling, backend selection, output format, accuracy, and cost implications. It could be improved by explicitly referencing the output schema structure, but the mention of 'confidence' and normalized waypoints suffices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining backend auto-selection, default features behavior, and the purpose of maxWaypointsPerFeature. It also clarifies how the 'hint' and 'region' parameters are used by vision-LLM backends, which the schema does not elaborate.
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: 'trace features from a reference photo into waypoints'. It specifies the output format (normalized [0..1] waypoints) and differentiates from sibling tools by focusing on image tracing for CAD, which none of the siblings cover.
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 trace features from a reference photo into waypoints' and provides guidance on backend selection (opencv, vision-llm, hybrid). It also mentions pairing with a skill. However, it does not explicitly state when not to use the tool or compare with alternatives, though siblings are not directly similar.
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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the verification ran and passed its gate. |
| error | No | Failure message (present on failure). |
| errorCode | No | |
| diagnostics | No | Verifier diagnostics (most checks). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. Description adds that each check 'fails closed on missing required params' and implies safe, non-destructive behavior. Does not detail output, but output schema covers that.
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?
Concise and well-structured: one sentence intro, then bulleted list of checks. Each bullet is brief. No redundant or irrelevant information. 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?
Given 28 parameters, 100% schema coverage, output schema, and annotations, the description is highly complete. It covers all check types, parameter grouping, usage rules, and prerequisites. Only minor gap is explicit output explanation, but covered by 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 has 100% coverage with individual parameter descriptions. Description adds value by grouping parameters per check (e.g., { urdf_path }) and explaining that all params except `check` are check-specific. This structuring compensates for flat 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 clearly states purpose: 'check a design against a rule set' and lists 8 specific check types with brief explanations. Distinguishes from siblings like evaluate_script by focusing on rule verification.
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...' and provides check-specific context (e.g., 'run evaluate_script first' for assembly). States parameter forwarding and failure behavior. Lacks explicit alternatives or when-not-to-use, but overall clear.
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 |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| chain | No | Upstream feature diagnostics in topological order; requested feature last. |
| error | No | |
| errorCode | No | |
| feature_id | 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. The description adds behavioral context: topological order, inline hints, and parameter listing. 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 moderately concise, front-loading the purpose and including necessary details. Minor redundancy could be trimmed, but overall 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?
With an output schema present (not shown), the description appropriately skips return value details but explains ordering. Parameter semantics are weak, but given the tool's diagnostic nature, it provides sufficient 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 description coverage is 0%. The description lists parameters with '?' indicating optionality but provides no semantic details about their roles or usage, failing to compensate for the lack of 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 traces why a feature failed by walking upstream diagnostics. It specifies returning diagnostics in topological order, distinguishing it from sibling tools like lookup_diagnostics.
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 trace why a feature failed' and references lookup_diagnostics for full per-code hints, providing clear guidance on when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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!
Related MCP Servers
- Alicense-qualityAmaintenanceEnables AI agents to write TypeScript to create, render, verify, and export parametric 3D models using Replicad/OpenCascade CAD kernel, headlessly from terminal or MCP clients.2MIT
- -license-qualityBmaintenanceEnables agent-assisted CAD engineering, allowing users to create, validate, and export CAD designs through natural language, with a deterministic engine that has zero LLM runtime dependency.
- Alicense-qualityAmaintenanceEnables coding agents to convert natural language engineering prompts into editable parametric CAD models with deterministic parsing, validation, and edit support.4Apache 2.0
- Alicense-qualityBmaintenanceAgent-native 2D drafting and 3D modeling kernel with a JSON op protocol, enabling parametric design, BIM semantics, and MCP server access for geometry generation and verification.1MIT
Your Connectors
Sign in to create a connector for this server.