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
- 2
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 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
44 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?
The description discloses key behaviors: it 'Durably insert[s]' code, 'Returns modified source plus diagnostics', and is 'Side-effect-free.' These details go beyond the annotations (readOnlyHint=false, destructiveHint=false) by explaining what 'modification' means and that it is non-destructive and returns a new version without altering external state.
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 purpose, each sentence adds unique value: purpose, code pattern, prerequisite, return value, and side-effect note. No unnecessary words, perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, 5 required) and the presence of an output schema, the description covers the essential purpose, usage, and return value. It could mention that diagnostics contain re-evaluation results or that the insertion is irreversible, but it is adequate for an AI 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?
The description provides a usage pattern showing how parameters map to the code, e.g., '{ type, origin, axis?, normal? }' and explains the relationship with add_part for the part_binding parameter. With 86% schema coverage, the description adds meaningful context beyond the schema by showing the typical invocation, though individual parameter details are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'add a mate connector to a part.' It provides a specific code pattern (<partBinding>.connector(...)), distinguishing it from sibling tools like add_constraint, add_feature, etc., which handle different entities.
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 add a mate connector to a part' and mentions using the part binding from add_part, providing clear context. However, it does not explicitly state when not to use it or list alternatives, though the sibling set implies this is the dedicated connector tool.
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?
The description claims 'Side-effect-free' and that the tool returns an updated list without mutation. However, annotations set readOnlyHint=false, indicating the tool may modify state. This direct contradiction undermines trust and leaves the agent confused about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with usage guidance, and every word adds value. It efficiently communicates core behavior without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the tool's operation (add constraint to list) and return (updated list), which is sufficient given the simple purpose. An output schema exists for detailed return structure, so the description does not need to elaborate further.
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 parameters are already well-documented. The description adds marginal value by stating that the constraint should be 'validated', but provides no further semantic detail 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 uses specific verbs ('add', 'append') and clearly states the resource: a sketch constraint to a list. It distinguishes from sibling tools like add_feature or add_mate by specifying 'sketch constraint', making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Use this when you need to add a sketch constraint to a list'). However, it does not provide when-not-to-use or mention alternative tools like add_connector or add_curve.
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?
Discloses side-effect-free, returns modified code + diagnostics, insertion location, and failure mode for missing params. Annotations already show readOnlyHint=false and destructiveHint=false, but description adds valuable 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?
Well-structured with bullet points for each kind, though somewhat lengthy. Every sentence carries information; could be slightly more concise but appropriate for 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 essential aspects: two kinds with parameters, output type and usage, side-effect nature, and failure behavior. Output schema exists, so return values are not needed in description. Complete for agent decision-making.
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 context like 'tangent magnitude ~ chord length' and defaults over the schema's own descriptions. With 100% schema coverage, baseline is 3, but the description provides meaningful enhancements.
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 'author a 3D Curve3D' with specific verb and resource, distinguishes two kinds (nurbs and hermite) with distinct behaviors, and notes that the output is consumed by specific sibling tools like add_variable_sweep and add_surface. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when you need to author a 3D Curve3D' and describes consumption patterns, differentiating from sibling tools. Lacks explicit when-not-to-use scenarios, 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_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 declares 'Side-effect-free' and explains the return: modified code plus diagnostics. This adds clarity beyond annotations (destructiveHint=false) and covers re-evaluation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear front-loaded purpose. It includes an example and additional guidance without unnecessary verbosity.
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 that an output schema exists (mentioned but not shown), the description adequately covers input, behavior, and advanced usage. It could mention error conditions, but overall it is sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters. The description adds value by specifying that feature_code is a single-statement line and gives an example. It also explains the insertion context (before last return) and faceLabels usage, enhancing 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 the tool inserts a new feature line into a script, specifying the exact insertion location (before the last top-level return statement). This distinguishes it from sibling add_* tools like add_connector or add_constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'Use this when you need to insert a new feature line into a script,' providing explicit when-to-use guidance. It does not list exclusions or alternatives, but the context of siblings implies different use cases.
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?
Discloses that all operations 'durably edit source' (consistent with readOnlyHint=false) and 'each relation fails closed on its own missing required params', adding 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?
Structured with bullet points for each relation, front-loaded with main use case. Though lengthy, it is efficiently organized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers relation types, required params, durable editing, failure behavior, and auth requirements. Output schema exists, so return values are not needed. Adequate for 22-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing baseline. Description adds value by explaining structure of each relation type, defaults, and verbatim forwarding of params, enhancing understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool authors a 'mate-graph relationship' into source, with specific relation types (mate, coupling, transmission). It distinguishes from sibling 'add_*' tools by specifying the resource and action.
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 mate-graph relationship' and explains each relation variant. It provides context but does not explicitly state when not to use or name alternatives, though siblings cover other additions.
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?
The description discloses that the tool is side-effect-free (caller persists returned source) and that it re-evaluates the script to return diagnostics. This adds significant behavioral context beyond annotations which only show readOnlyHint=false and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the purpose, clearly explain the action, and note the side-effect. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's action, return values, and side-effects. It lacks details on prerequisites (e.g., assembly must exist) or error conditions, but for a modification tool with a clear output description, it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add new parameter details beyond what is already in the schema, though it gives a code template showing how parameters are used.
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 part to an assembly, specifies the exact code insertion pattern, and distinguishes from sibling add_* tools by focusing on part addition in kernelCAD source.
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 add a part to an assembly,' providing clear context. It does not explicitly mention when not to use or alternatives, but the context is sufficient given the sibling tools are for different elements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_path_segmentAdd Path SegmentAInspect
Use this when you need to append a curved segment to an existing PathBuilder chain on the named chain_anchor variable. The call is injected at the END of the chain, immediately before any .close(). One segment kind, selected by kind:
'spline' —
.spline(points, opts?): interpolates through everypointswaypoint (Vec2[] mm, >= 2 entries; points[0] must match current pen position). Optionaltension, andstartTangent/endTangent2D direction vectors that constrain the first-derivative direction at the endpoints (magnitude normalised internally). Use for organic 2D outlines (eyewear brow, ergonomic handle, sneaker midsole).'nurbs' —
.nurbsSegment(controlPoints, opts?): explicit B-spline net (Vec2[] mm, >= degree+1 entries; controlPoints[0] must match pen; pen ends at controlPoints[N-1]). Optionaldegree(default 3), rationalweights(strictly positive), explicitknots(length = controlPoints.length + degree + 1).'hermite' —
.hermiteG2(a, b): each endpoint{ point: Vec2, tangent: Vec2, curvature?: Vec2 }in mm (a.point must match pen; pen ends at b.point).curvaturedefaults to [0,0] (G1); pass matching curvatures for G2 blends. Tangent magnitude is the first derivative (~ chord length), NOT unit length. Returns the modified code + diagnostics from re-evaluating. Side-effect-free. Each kind fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | kind:'hermite' — start endpoint; point must match current pen position within 1e-6 mm. | |
| b | No | kind:'hermite' — end endpoint. | |
| code | Yes | The .kcad.ts source code. | |
| kind | Yes | Which path-segment kind to append. | |
| knots | No | kind:'nurbs' — optional explicit knot vector; length must equal controlPoints.length + degree + 1. | |
| degree | No | kind:'nurbs' — B-spline degree (default 3). | |
| points | No | kind:'spline' — waypoints as Vec2 pairs in mm; at least 2 entries; first must match current pen position. | |
| tension | No | kind:'spline' — optional Catmull-Rom-style stiffness; forwarded to the underlying B-spline approximation. | |
| weights | No | kind:'nurbs' — optional rational weights (one per control point; strictly positive). | |
| endTangent | No | kind:'spline' — optional [x, y] direction vector at points[N-1]. Magnitude is normalised internally; direction matters. | |
| binding_name | No | Reserved for future use; the segment injection mutates the chain anchor in place. | |
| chain_anchor | Yes | JS identifier of an existing PathBuilder binding (e.g. `const brow = path().moveTo(0,0)`). | |
| startTangent | No | kind:'spline' — optional [x, y] direction vector at points[0]. Magnitude is normalised internally; direction matters. | |
| controlPoints | No | kind:'nurbs' — control-net vertices as Vec2 pairs in mm; at least degree+1 entries. |
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 side-effect-free behavior, return value (modified code + diagnostics), injection location (END of chain before close), and failure behavior (fails closed on missing required params). This adds significant value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence then a detailed list of kinds. It is slightly verbose but every sentence adds value. It is 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 complexity (14 params, nested objects, conditional requirements), the description thoroughly covers usage, parameter details, and return value. It is complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description provides extensive additional context: explains each kind's parameter semantics, units (mm), constraints (matching pen position), defaults, and meaning of optional fields like tension, degree, weights, knots. This greatly aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: appending a curved segment to an existing PathBuilder chain. It specifies the verb 'append' and the resource 'curved segment to PathBuilder chain', distinguishing it from sibling tools like add_connector or add_constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool and provides use-case examples for each segment kind. However, it does not explicitly state when not to use it or compare with alternative siblings.
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, geometric implementation as boolean union, behavior with additive vs subtractive features, and pattern-instance face reference resolution, going well beyond the annotations which only mark non-destructive and non-read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient and well-structured: starts with usage, then insertion point, args, return, safety, and geometric note. Every sentence provides unique value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the complex conditional parameter requirements, return value (modified code + diagnostics), and geometric behavior. Adequate for a tool with 7 parameters and nested objects, especially given the output schema exists.
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%), and the description adds context for the return value and optional assign_to parameter, but does not elaborate on spec objects beyond stating they should match kind. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'repeat a feature in a pattern' and specifies inserting a specific Shape.pattern method call into a kernelCAD script. Distinct from siblings like add_feature and flatten_pattern by focusing on pattern 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?
Explicitly tells when to use ('when you need to repeat a feature in a pattern') and provides insertion context ('before the last top-level return'). Lacks explicit when-not-to use or direct comparison with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_surfaceAdd SurfaceAInspect
Use this when you need to author a NURBS Surface into the user's .kcad.ts. One authoring path, selected by kind:
'nurbs' — insert a nurbsSurface(...) / surfaceFromCurves(...) call. Pass either { controls, degree, weights?, knots?, periodic? } for direct construction, OR { section_sketch_ids } for skinning. Slice-1 limitation: weights are accepted but currently ignored (TColStd_Array2OfReal not exposed in WASM bindings); surfaces are non-rational.
'boundary' — insert a surfaceFromBoundary([c1,c2,c3,c4], opts?) call: one NURBS face through 4 boundary Curve3D refs (bottom, right, top, left in loop order; adjacent endpoints must coincide within 1e-6 mm) via OCCT BRepOffsetAPI_MakeFilling. The returned Surface produces no Shape until you chain .thicken(t) or .toShape() (do that via add_feature on the binding name). Returns the modified code + diagnostics. Each kind fails closed on its own missing required params.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Current .kcad.ts source. | |
| kind | Yes | Which surface-construction path to use. | |
| knots | No | kind:'nurbs' — optional explicit knot vectors; missing => clamped uniform inferred. | |
| degree | No | kind:'nurbs' — degrees in U and V; each in [1, nU-1] / [1, nV-1]. | |
| weights | No | kind:'nurbs' — optional rational weights, same grid shape as controls. Ignored in slice-1. | |
| controls | No | kind:'nurbs' — control-point grid for direct construction (controls[u][v] = [x, y, z], mm). | |
| periodic | No | kind:'nurbs' — optional periodic flags per parametric direction. | |
| sampling | No | kind:'boundary' — OCCT NbPtsOnCur sampling parameter (default 15). | |
| continuity | No | kind:'boundary' — continuity grade applied to every edge ('C0' | 'C1' | 'C2'), or an array of 4 grades (one per edge, 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 indicate this tool is not read-only, destructive, or open-world. The description adds important behavioral details: slice-1 limitation (weights ignored), surfaces are non-rational, boundary edges must coincide within 1e-6 mm, and returns modified code + diagnostics. It also clarifies that no shape is created until a later step. This is valuable context beyond what annotations 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 structured into two clear sub-sections for each kind, with bullet points. It is somewhat long (over 100 words) but every sentence adds value. It front-loads the purpose and key distinctions. Minor conciseness improvements are possible but not critical.
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 (12 parameters, nested objects, two paths) and the presence of an output schema (not shown but mentioned), the description covers main use cases, limitations, and return values. It lacks explicit error scenarios or prerequisite checks (e.g., existing curve bindings for 'boundary'), but this is partly addressed in the schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, so baseline is 3. The description adds meaningful context beyond the schema, such as the slice-1 limitation for weights, the need for edge coincidence in 'boundary', and default values (e.g., sampling default 15, continuity default 'C0'). It also explains the purpose of each parameter in the context of each kind.
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 is for authoring a NURBS Surface into the user's .kcad.ts file, with two specific construction paths ('nurbs' and 'boundary') each having distinct behavior. It distinguishes itself from sibling tools (e.g., add_curve, 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?
The description explicitly says 'Use this when you need to author a NURBS Surface...' and explains the two paths. It also notes that the returned Surface produces no Shape until chaining with .thicken(t) or .toShape() via add_feature, guiding when to combine tools. However, it doesn't explicitly state when not to use it or compare with alternative surfaces or siblings.
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 are minimal (readOnlyHint=false, destructiveHint=false), but the description adds valuable context: it is side-effect-free, returns modified code plus diagnostics, and fails closed on missing params. This goes beyond what annotations 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?
Well-structured with clear sections for each mode, front-loading the purpose. Could be slightly more concise but is efficient and avoids unnecessary elaboration.
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 17 parameters and an output schema, the description covers mode selection, side effects, and failure behavior adequately. It does not detail return format, but that is provided by 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?
Schema description coverage is 100%, so baseline is 3. The description adds some mode-specific context (e.g., depth sign meaning) that enriches understanding, but overall the schema already documents all parameters well.
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 is for authoring text into a kernelCAD script before the last top-level return, and details two distinct modes ('sketch' and 'emboss') with specific use cases. The title and name are consistent.
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 on when to use the tool (for text authoring) and describes the two modes, but does not explicitly state when not to use it or suggest alternative sibling tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 key behaviors: insertion location (before last top-level return), validation via regex, return format (modified code + diagnostics), and side-effect-free nature. Annotations are present but minimal; the description adds significant context beyond them. 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 7 sentences, each adding distinct value: purpose, insertion instruction, result handling, binding references, section constraints, limitation, validation, return, and side-effect. No wasted words, front-loaded with 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 complexity (6 params, nested array) and the presence of an output schema, the description covers insertion location, validation, constraints, limitations, and usage pattern. It is complete enough for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, and the description adds extra meaning: it explains bindings reference existing variables, sections constraints (strictly increasing t, first t=0, last t=1), and default binding name. This adds value beyond the schema's 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: to author a variable-section sweep by inserting a variableSweep declaration. It uses specific verbs ('author', 'insert') and distinguishes from sibling tools like add_feature, which is for chaining operations on the result.
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 notes a limitation (orientation not exposed). While it doesn't list alternatives, the context is sufficient for an agent to decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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?
Annotations indicate readOnlyHint=false, so the tool is mutable. The description confirms this by stating it 'durably insert[s]' code and returns modified source. It adds behavioral context about validation/review gates. 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 three sentences: the first states the purpose, the second gives a concise code template and insertion point, and the third explains validation. Every sentence adds essential information without redundancy. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, output schema exists) and annotations, the description is complete. It explains the effect, syntax, validation, and return value. The output schema likely details the return structure, so no further explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by providing a code template showing how parameters map to the insertion syntax. It clarifies the role of 'reachable' as world-frame Vec3 targets and notes 'toleranceMm?' as optional. 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: to declare a reachability target for a connector. It uses specific verbs ('declare', 'durably insert') and specifies the resource ('workspace target for a connector'). It distinguishes itself from sibling tools that add other entities (connectors, constraints, etc.) by focusing on workspace targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('when you need to declare a reachability target for a connector'). It provides context about the insertion point and validation gates. While it does not explicitly mention when not to use or alternatives, the purpose is clear enough to guide selection among siblings.
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 (readOnlyHint: false, destructiveHint: false, openWorldHint: true) are supplemented by rich behavioral details: the tool drives a headless browser, requires a running dev server, collisions do not fail the call (artifact still written), verification runs before any cost, and focus/hide are render-only. 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 long but well-structured, beginning with the core purpose, then systematically covering modes, verification, parameters, environment, and return value. Every sentence adds necessary information; minor cuts could be made (e.g., the environment detail could be slightly shorter) but overall it's 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 tool's complexity (8 parameters, output schema, environment requirements), the description covers all necessary aspects: parameter behaviors, error handling (collisions do not fail), return structure, and prerequisites. The output schema is listed in the description, so the agent knows 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?
Schema description coverage is 100%, but the description adds significant value beyond the schema: explains mutual exclusivity of output_path and frames_dir, default output path, semantics of no_verify/verify_every, and clarifies that focus/hide are render-only. This transforms the parameter list into a coherent mental model.
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 purpose: 'Use this when you need to render a script's animation timeline to a video.' It specifies the input (a .kcad.ts file) and output (MP4 or PNG frames). It distinguishes itself from other tools by explaining the file-only mode and the rendering engine, making it unambiguous what the tool does.
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 when-to-use guidance: rendering a script's animation timeline to a video. It also details environment requirements (dev server at localhost:5173). However, it does not explicitly mention when not to use this tool or potential alternatives among siblings like 'render_preview', which would improve selection accuracy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_loopRun Design LoopAInspect
Use this when you need to run a CAD design loop over multiple attempts. Run an agent CAD design loop over one or more attempt scripts: review each attempt with review_cad, continue past functional attempts that still have unresolved review warnings, return structured repair prompts, and optionally write a Studio-compatible build record JSON for visual replay.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Original user design goal. Fed into every review_cad repair prompt. | |
| assembly | No | ||
| attempts | Yes | Ordered design attempts. Each item is { id?, title?, file? or code?, visualReview? }. File attempts can be replayed by Studio build records. | |
| epsilonMm3 | No | Forwarded to review_cad. | |
| stopOnPass | No | Stop after the first attempt that is functional and passes the quality gate. Default true. | |
| recordTitle | No | Optional title for the build record. | |
| combinatorial | No | Sample all 2^N limit-corner combinations across mates with declared limits. Capped at 8 mates with limits; combine with samplesPerMate for both interior coverage and worst-pose detection. Default false. | |
| samplesPerMate | No | Pose-envelope samples per declared-limit mate. 1 (default) = corners only; >=3 adds uniform interior points between min and max. Total samples per non-locked mate = samplesPerMate. | |
| gripperAperture | No | Optional gripper aperture request forwarded to review_cad. | |
| trackConnectors | No | Connector refs to track across sampled poses. | |
| outputRecordPath | No | Optional JSON path to write a Studio-compatible build record. | |
| preserveInterfaces | No | External mates, connector refs, part names, or behavioral interfaces the agent must preserve between attempts. | |
| allowReviewWarnings | No | Warning diagnostic codes the original prompt explicitly allows. Other review warnings keep the loop iterating even if review_cad is functionally ok. | |
| includeInterference | No | Forwarded to review_cad. Default true. | |
| includePoseEnvelope | No | Forwarded to review_cad. Default true. | |
| requireVisualReview | No | Require screenshot-backed visualReview with structured checks before accepting an attempt. Default true; set false only for explicit non-visual batch checks. |
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 indicate readOnlyHint=false and destructiveHint=false, and the description aligns with these. It discloses side effects like optionally writing a build record and outlines the looping/iteration behavior. It adds value beyond annotations by detailing the multi-step process.
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 usage context. Each sentence adds essential information without redundancy. The structure is efficient and clear.
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 (16 parameters, nested objects, output schema), the description effectively covers the core workflow: review, continue, return prompts, write record. It does not explain every parameter, but the schema handles that. The description is complete enough for an agent to understand the tool's primary function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 94%, so most parameters are well-documented in the schema. The description adds minimal extra parameter context, e.g., mentioning the optional build record relates to outputRecordPath. With high schema coverage, a 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?
Description specifies the verb 'run' and resource 'CAD design loop', detailing a multi-step process: reviewing attempts with review_cad, continuing past functional attempts with warnings, returning structured repair prompts, and optionally writing a build record. This clearly distinguishes the tool from siblings like review_cad or solve_mates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly states 'Use this when you need to run a CAD design loop over multiple attempts', providing a clear context. It implies iterative design refinement but does not explicitly state when not to use it or mention alternatives. The guidance is good but could be more comprehensive.
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?
Annotations already provide readOnlyHint=true and destructiveHint=false. Description reinforces read-only and adds detailed behavioral context: returns per-part, interference, mate-graph, and param changes in JSON format, with special handling for single-shape scripts. 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?
Single dense paragraph that front-loads the use case and packs essential details. No wasted sentences, though slightly dense. Could benefit from minimal structuring 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 output schema exists (not shown) and annotations are rich, the description covers purpose, usage, behavioral details, and parameter roles thoroughly. Special case for single-shape scripts adds completeness. 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 descriptions for all 4 parameters. Description adds meaning by explaining the baseline-revision pair, options for inline or file paths, and the pseudo-part handling for single-shape scripts. Adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Use this when you need to see exactly what changed between two script versions.' Specifies verb (diff), resource (CAD scripts), and distinguishes from siblings by emphasizing structured geometric delta. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('after editing a script to verify exactly what changed physically before re-rendering') and that it is read-only. Does not explicitly exclude any scenarios but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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?
Annotations mark readOnlyHint=true, and the description confirms the tool does not modify state, especially in dryRun mode. It further explains what checks are performed and skipped (e.g., no OCCT lowering in dryRun), providing rich 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?
The description is thorough but organized and front-loaded with the purpose. Every sentence adds value, though it could be slightly tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (script evaluation with conditional parts summary and dry run mode), the description covers all necessary aspects: inputs, behavior, output indications, and when to use each mode. It is complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are described in the schema (100% coverage). The description adds meaning by explaining the distinction between 'file' and 'code', and the detailed behavior of 'dryRun' (fast validation, no session impact). This exceeds the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool evaluates a kernelCAD script for compilation, providing pass/fail, feature count, diagnostics, and optionally a parts summary. It distinguishes between inline code and file path parameters, and is distinct from sibling tools that modify or query geometry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use when needing to run a script and check compilation. It details when to use dryRun for fast iteration versus a full evaluation, but does not directly compare to sibling tools or specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 already declare readOnlyHint=true, destructiveHint=false, so the tool is safe. The description adds operational context: the exact return fields, the meaning of distance (negative inside, zero on surface, positive outside), and the prerequisite binding step. This enriches the agent's understanding 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 front-loaded with purpose and usage, then adds necessary details. It is slightly longer than minimal but every sentence contributes information: return value, distance semantics, use case, prerequisite, parameter hints. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with moderate complexity (binding prerequisite, specific return type), the description covers the main points: when to use, what it returns, parameter hints, and relationship to materialize. With annotations covering safety and output schema (presumably documented), it is nearly complete. Could optionally include a brief example, but not necessary.
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 descriptions are generic. The tool description adds value by explaining the relationship between 'code' and 'file' (pass either) and clarifying that 'fieldName' must come from sdf.bind, and that 'point' is a 3D array. This guidance helps the agent use parameters correctly.
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 value and its meaning, and distinguishes it from the expensive sibling 'sdf.materialize' by positioning it as a verification step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use ('when you need to sample a signed-distance field at a point' and 'to verify SDF composition before calling sdf.materialize') and provides a hint about parameter grouping. While it doesn't explicitly state when not to use, the context is sufficient for an agent to infer alternatives.
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 discloses file creation, side-effect of additional mesh files for urdf/sdf-gazebo, watertight verification behavior, and specific error codes. Annotations only indicate read/write nature; the description adds extensive behavioral context beyond them, with 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 comprehensive but verbose, repeating some schema information (e.g., format enum). It is front-loaded with the usage statement, and bullet points aid readability, but it could be more concise without losing essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 10 parameters, two targets, and file output side effects, the description covers most aspects: required params, format specifics, error modes, and target differentiation. It does not explain the return value explicitly, but an output schema is said to exist, so this gap is 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 baseline is 3. The description adds target-specific parameter usage, clarifies required vs optional per target, and explains the option bag format. This provides meaningful extra context for parameter selection and invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports geometry to a file and distinguishes two targets ('model' and 'part') with specific behaviors and formats. The verb 'export' is precise, and the resource 'geometry to a file' is unambiguous. Sibling tools are not export-related, so differentiation is internal and well-defined.
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 export geometry to a file', providing clear context. It details required parameters per target but does not explicitly state when not to use it. Given the lack of alternative export tools among siblings, the guidance is sufficient.
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 declare readOnlyHint=true, destructiveHint=false. Description adds behavioral context: writes to local cache, returns cache path and sha256 fingerprint, offline resolution for bundled ids, requires partsBaseUrl for non-bundled. No contradiction; adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. Front-loaded with usage statement. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists (not shown), description covers return values (cache path, fingerprint). Explains resolution logic and prerequisites. Could detail query parameters more, but provides sufficient context for operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (only partsBaseUrl described). Description explains id/query as resolution keys and partsBaseUrl as opt-in endpoint. Does not cover family, category, standard. Adds some meaning but not comprehensive for all 6 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?
Clearly states the tool downloads a catalog part as a STEP file. Uses specific verb 'download' and resource 'catalog part as a STEP file'. Distinguishes from siblings like 'find_part' (search) and 'add_part' (insert).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: 'when you need to download a catalog part as a STEP file'. Differentiates between bundled and non-bundled ids. Does not mention when not to use or compare to siblings, but provides clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_partFind PartBRead-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 already declare readOnly, openWorld, non-destructive. The description adds behavioral details: tokens AND-combine, cross-facet filters AND-combine, and the ability to enable remote tier via partsBaseUrl or env var. 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?
Two sentences, front-loaded with purpose, no fluff. Technical terms (fuzzy query, faceted filters, AND-combine) are concise and appropriate for domain users. May be dense for outsiders, but effective for intended audience.
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?
Complex tool with 8 parameters and an output schema (exists), but description lacks detail on how to use faceted filters and what parameters do. The combination logic and remote option are covered, but parameter semantics are missing, making it barely adequate for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 13% of parameters have descriptions in the schema (partsBaseUrl). The description explains the combination logic and the remote/bundled distinction but does not detail individual parameters like tag, query, family, category, etc. Given low schema coverage, more parameter guidance is 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 is for finding parts in the catalog via fuzzy query and faceted filters. It distinguishes from siblings like fetch_part (which likely fetches a specific part) by highlighting bundled and optional remote search. However, it does not explicitly contrast with other search-like siblings (e.g., 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?
The description starts with 'Use this when you need to find a part' but provides no when-not-to-use or alternatives. No mention of when to use fetch_part or query instead. The only guideline is the opt-in remote tier, but it lacks context on choosing between bundled vs remote.
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?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral details: it returns a Region with specific components (outer polyline, holes, bend lines, sketch plane) and a constraint (at most 2 bends). This enhances understanding beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: stating use case, describing output, and specifying input options. It is front-loaded with the primary purpose and avoids extraneous 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?
Given the tool's complexity (sheet-metal flattening) and the presence of an output schema, the description covers the core behavior and return type. However, it lacks details on input formats ('code' meaning, 'file' path), and the 'Slice 1' constraint is cryptic. More context would be helpful.
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%, so the description must compensate. It explains that {file} or {code} are alternative inputs and {featureId} selects a specific shape. However, it does not clarify the format or source of these parameters (e.g., what 'code' refers to), leaving 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: 'unfolded flat pattern of a bent sheet-metal part.' It uses specific verbs ('flatten', 'return') and specifies the resource ('Sheet-Metal Pattern'). It distinguishes itself from sibling tools like add_feature or remove_feature, which deal with modeling 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 the unfolded flat pattern' and gives usage constraints ('Slice 1: at most 2 bends'). It mentions passing {file} or {code} with optional {featureId}. While it does not list when not to use it, the purpose is clear and contrasts well with sibling tools.
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 well beyond the readOnlyHint annotation by disclosing that the render is model-side, not affected by user's camera, deterministic (same input = same bytes), colors match Studio, error behavior ('{ ok: false, error, hint }'), and security/permissions based on slug. This level of detail is essential for correct agent behavior and far exceeds the annotation's binary hint.
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 thorough but every sentence adds value. It is front-loaded with the core purpose and critical warnings, then provides detailed parameter and behavior information. While it is long, the density of useful information justifies the length; minor redundancy could be trimmed (e.g., 'The image is always current' repeats earlier points).
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 views, base64 vs paths_only, deterministic behavior, error handling, permissions), the description covers all key aspects. It explains return formats (inline image vs metadata), error scenarios, and dependencies (must push model first). The presence of an output schema does not detract; the description complements it with practical usage details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds significant context for each parameter: for `slug` it explains the capability/OAuth implications; for `view` it clarifies the default contact sheet layout and the use of single views; for `paths_only` it explains why one would set it to true (sandboxed agent HTTP limitations). This enriches the schema and aids the agent in making informed choices.
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 ('Render'), a specific resource ('a project's current model'), and explains the output ('return it as an inline image') and the purpose ('so you can SEE what you built'). It clearly distinguishes from siblings by mentioning specific usage context (after open_in_studio) and explicitly warns against asking the user to change their view, which is unique to this tool.
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 ('Use this after open_in_studio (or any /p/<slug> link)'), when not to use it ('NEVER ask the user to rotate, zoom...'), and provides actionable guidance ('To see a different angle, call this tool again with a different `view`'). It also clarifies deterministic behavior and the need to push changes first with open_in_studio.
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 (readOnlyHint, destructiveHint=false) already indicate safe read operation. The description adds value by detailing the raw mesh content (positions/indices/normals) and OAuth requirements, which are beyond annotation scope. 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?
Three concise sentences: purpose, usage context, and auth requirement. No redundant words. Front-loaded with the core action, making it efficient for AI parsing.
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 simple tool (single parameter, read-only) with an output schema present, the description fully covers the purpose, usage context, auth, and delivery mechanism. No missing information for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single 'slug' parameter. The description adds context by stating the slug is 'from open_in_studio/get_project' and explains visibility-based auth, which supplements the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'raw per-feature triangle mesh (positions/indices/normals)' of a project's model. The verb 'return' and specific resource (per-feature mesh) differentiate it from siblings like mesh_summary (summary) and get_latest_render (rendered image).
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 specifies the tool is 'for the in-chat 3D viewer widget to render geometry' and mentions the delivery bridge. It also clarifies when OAuth is needed based on slug visibility. However, it does not explicitly state when to avoid using it or name alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
| 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 discloses key behaviors beyond annotations: it returns full .kcad source and metadata, lists projects in most-recently-updated order, and requires OAuth for private projects and listing. It also explains the workflow related to editing and opening with the same slug. This adds significant value over the annotations (readOnlyHint, destructiveHint).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with clear, actionable sentences. It is front-loaded with the main purpose and includes all necessary details. While it is somewhat lengthy, it avoids redundancy and remains focused, earning a high score for conciseness and structure.
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 simplicity (one optional parameter, output schema present), the description is comprehensive. It covers both operational modes, authentication, ordering, and the relationship with other tools (e.g., open_in_studio). No gaps are apparent for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides complete description for the slug parameter (100% coverage). The description adds contextual meaning, such as how slug is obtained (from a /p/<slug> link or prior listing) and the effect of omitting it (listing mode). This enhances understanding beyond 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 defines the tool's purpose: fetching a project by slug or listing the user's saved projects. It uses specific verbs like 'fetch' and 'list', and distinguishes between the two modes based on the presence of the slug parameter. This purpose is well-differentiated from sibling tools, which perform other actions like adding connectors 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 provides explicit when-to-use guidance (reopen a saved project or browse saved projects) and instructions for each mode. It also notes authentication requirements (OAuth for private projects and listing). However, it does not explicitly state when not to use this tool or mention alternatives among siblings, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 declare readOnlyHint=true and destructiveHint=false, which the description aligns with by stating 'read facts.' The description adds behavioral details: most subjects accept {file | code} and params are subject-specific and forwarded verbatim. This supplements annotations well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and then lists subjects in a bullet-like format. It is somewhat lengthy due to the many subjects, but each line is necessary to clarify the subject options. Could be slightly more concise, but remains clear.
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 parameters, many enum values, optional subject-specific params), the description covers the purpose, each subject, and parameter usage. Output schema exists, so return values need not be described. It provides sufficient context for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The description adds value by explaining that 'All params except of are subject-specific and forwarded verbatim' and by enumerating the 'of' values with brief explanations, which the schema's enum descriptions lack detail.
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 'Use this when you need to read facts about a model,' clearly stating the verb (read) and resource (model facts). It lists all possible subjects via the 'of' parameter, making it distinct from sibling tools that perform 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?
The description explicitly says when to use: 'when you need to read facts about a model.' It does not explicitly state when not to use, but given the read-only nature and the presence of many mutation siblings, the usage context is clear. It could be improved with explicit alternatives.
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. The description adds valuable context about what exactly the tool lists (global functions, Shape methods, Sketch methods, etc.), extending beyond the annotation info. 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 a single paragraph of three sentences, front-loading the purpose. While comprehensive, it could be slightly more streamlined by merging the list of items into a more concise phrase, but it is still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, informative annotations, and an output schema, the description is fully complete. It informs the agent exactly what to expect and when to use the tool, leaving no gaps in understanding.
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 is empty with 100% coverage (no parameters). The description compensates by explaining the tool's output and purpose, which is sufficient for an agent to understand the tool without needing parameter 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 specifies a clear verb+resource: 'list the kernelCAD script-runtime surface'. It enumerates specific categories (global functions, Shape methods, etc.), making the tool's purpose distinct from siblings like add_feature 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 explicitly states when to use the tool ('Use this when you need to list...'). It does not provide explicit when-not-to-use or alternative tools, but the context of sibling tools and the specificity of the description make it clear.
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=true and destructiveHint=false. Description adds value by specifying the exact content (SKILL.md body), output format (uri, mimeType, text), and what the 'text' field contains. 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 concise sentences plus a brief bullet for usage and input/output. Every sentence adds value, no wasted words. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, existing output schema, and annotations, the description is complete. It specifies what the output is, when to use, and the alternative access method. 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 is 100%. Description explicitly states 'INPUT: none', which is clear and adds no confusion. 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 clearly states 'Return the kernelcad-authoring SKILL.md body' with specific verb and resource. The tool is well-distinguished from siblings like 'lookup_api' and '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?
Explicitly advises when to use (before generating CAD code if client lacks resources) and provides an alternative (read resource directly). This is excellent guidance.
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?
Describes ranking algorithm (BM25 over title/tags/keywords/trigger), returns top-k, and specifies empty result handling. Annotations already indicate read-only and non-destructive, and description 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?
Single paragraph that is well-structured and front-loaded with purpose. Each sentence adds value, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adequately covers purpose, usage, behavior, and parameters without needing to detail return values. 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 covers both parameters with descriptions (100% coverage). Description confirms natural-language query and default/max for k, but does not add substantial new information beyond what schema 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 identifies the tool as searching a kernelCAD cookbook for canonical pattern snippets, with specific examples like 'fillet-after-subtract' that distinguish it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use ('canonical pattern snippet for a CAD task') and provides example use cases. Implicitly guides when not to use by indicating empty results and proceeding without cookbook help, but does not explicitly contrast with alternatives.
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 indicate readOnlyHint=true and destructiveHint=false. The description adds that it is a 'tiny one-shot call' and provides the 'canonical list up front.' This gives additional behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with purpose, and every sentence adds value. 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?
The tool is simple with no parameters and an output schema exists. The description fully explains what it returns and how it relates to inline hints, making it complete for an agent to decide to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100% trivially. The description does not need to add parameter semantics. Baseline for zero parameters is 4.
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.' It distinguishes from siblings by noting that hints are also inline on every diagnostic, but this tool gives the canonical list upfront. Specific verb and resource.
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...' providing explicit usage context. It also mentions its usefulness for pre-populating retry strategies. While it doesn't explicitly state when not to use or name alternatives, 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.
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 declare readOnlyHint=true, non-destructive, closed-world. Description adds beyond that: it mentions the full OCCT pipeline execution, that raw vertex/index/normal arrays are never returned (only summary), and that it evaluates modern sources that the legacy client cannot. 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 a clear initial verb, bullet-point-like usage guidance, and a detailed output section. While slightly long, every sentence adds value and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, output schema provided), the description is complete: it explains the output structure (ok, bounds, features, failedFeatureIds) and how to interpret the boolean ok flag. It also contrasts with rendering alternatives, covering both usage and output semantics.
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 specifying that source is the .kcad.ts script text (required), fileName is a diagnostic label, and params are parameter overrides for stateless slider recompute. This contextualizes the parameters beyond the schema fields.
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 with bounds and per-feature details. It distinguishes from siblings like get_model_mesh and get_latest_render by explicitly mentioning it is a summary-only tool and directing to the rendering alternative.
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 explains when to use: for inspecting geometry without a viewer, checking size/shape, triangle counts, or verifying feature coverage. Also provides a clear exclusion: to see the rendered model, use open_in_studio + get_latest_render instead. Additionally, mentions that it runs the server-side OCCT pipeline, clarifying its scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_in_studioOpen in StudioAInspect
Use this when the user wants to SEE or share the model — it persists the current kernelCAD model and returns a one-click link that opens it in the kernelCAD Studio web app, where the user can view and share it. Pass the full .kcad source you have been building as code. code is OPTIONAL: if you just called evaluate_script you can omit it and this reuses that last evaluated source automatically (no need to re-send the whole script). Pass code explicitly to override, or whenever you have not evaluated this exact source yet. The result includes a slug — pass that slug on every subsequent call to UPDATE the same project in place: the user's open Studio tab re-renders live, so they can watch the model evolve as you iterate. Omit slug only for a new, separate model (each omission creates a new project and link). Trigger phrases: "open it in Studio", "let me see it", "show me the model"; also call it after you finish a build, and after each meaningful revision while iterating.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | The full .kcad source of the model to open in Studio (the script you have been editing). Optional: omit to reuse the source from your most recent evaluate_script call. | |
| slug | No | Slug returned by a previous open_in_studio call. When given, updates that existing project in place (live-updating the user's open Studio tab) instead of creating a new one. | |
| title | No | Optional human-readable title for the model (shown in Studio). Defaults to "Model from Claude". | |
| parameters | No | Optional list of the model's editable parameters, so Studio can show parameter controls. |
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. |
| 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). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, openWorldHint=true. The description adds valuable behavioral details: it persists the model, returns a link, can update an existing project in place via slug, and causes live re-rendering in the user's Studio tab. This goes well beyond annotations and provides comprehensive understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-structured, with the main purpose front-loaded followed by parameter details and usage triggers. Every sentence adds value, though some trimming could be done. It is organized and easy to follow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and complex behavior (optional reuse, updating, live-rendering), the description covers all necessary context: when to use, parameter details, behavior of slug, return value (slug), and even trigger phrases. With an output schema assumed, it doesn't need to explain return structure, but it mentions the slug. It is 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 coverage is 100%, so baseline is 3. The description adds significant meaning: code is optional and can reuse last evaluated source, slug for updating, title defaults to 'Model from Claude', parameters for editable controls. These details help the agent use parameters correctly.
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 let the user SEE or share the model by persisting the current kernelCAD model and returning a one-click link. It uses specific verbs like 'SEE', 'share', 'persists', and 'returns a one-click link'. It distinguishes from siblings by focusing on viewing/sharing, while siblings like evaluate_script are for execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: when the user wants to see or share the model, after finishing a build, or after meaningful revisions. It also provides trigger phrases. However, it does not explicitly state when not to use it or mention alternatives like evaluate_script, though it implies evaluation is separate. This is still strong guidance.
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 claims the tool is 'side-effect-free', which contradicts the annotation 'readOnlyHint: false'. This suggests the tool may have side effects (e.g., modifying code state), creating a serious inconsistency. While the description does add transparency about the deferred implementation of 'asEdge', the direct contradiction with annotations severely undermines trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose in the first sentence. It is reasonably concise but includes extra details like the chained call syntax and mention of 'BRepProj_Projection not bundled', which add value. Could be slightly shorter without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior, usage patterns, and a known limitation. With the output schema present (though not shown), the lack of detailed output description is acceptable. It provides sufficient context for an AI agent to use this tool correctly, though it could mention that the output includes diagnostics.
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?
Input schema coverage is 100%, so baseline is 3. The description adds meaningful context for several parameters: for 'curveExpression' it specifies 'JS expression returning a closed sketch'; it clarifies that 'asEdge' is deferred; and it explains the scaling mode default. This goes beyond the schema's basic 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: wrapping a 2D curve onto a 3D face. It uses specific verbs ('project', 'wrap') and identifies the resource ('2D curve', '3D face'). This distinguishes it from sibling tools like 'add_curve' or 'add_path_segment', which operate on 2D sketches or paths.
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 to wrap a 2D curve onto a 3D face') and recommends pairing with '.extrude(d)' or '.cut(...)' for practical applications. It also notes that 'asEdge: true' is currently deferred, providing usage caveat. However, it does not explicitly state when not to use it or list alternatives.
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 declare readOnlyHint=true and destructiveHint=false, and the description adds behavioral details such as mode-specific operations, parameter forwarding, and return types (matched entities, resolved entity, lineage walk). This provides clear beyond-annotation context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a purpose statement followed by bullet points for each mode. No redundant 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?
Given the tool's complexity (3 modes, 7 parameters), the description covers all modes and parameter roles adequately. Output schema exists but is not described; however, the description mentions return types for each mode, making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds value by linking each parameter to specific modes (e.g., ref for resolve/lineage, query for evaluate), clarifying conditional usage beyond the schema's short 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: 'resolve or inspect topology against a script's lowered geometry'. It details three modes (evaluate, resolve, lineage) with specific use cases, effectively distinguishing from sibling tools focused on creation/modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Use this when you need to resolve or inspect topology') and explains each mode's context. However, it does not explicitly mention when not to use it or compare directly to alternatives like 'inspect'.
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 the annotations set destructiveHint=true, a direct contradiction. This undermines trust and accuracy.
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 impactful sentences with no wasted words. Front-loaded with usage instruction, then details behavior and constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key behavior (substring match, return statement exception, return diagnostics) and doesn't need to detail output format since output schema exists. Missing edge cases or error handling, but sufficient for a simple 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%, and the description adds meaning by explaining 'match' as a substring that uniquely identifies the line, going beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes a feature line from a kernelCAD script via substring match, and specifies it refuses to remove return statements. This distinguishes it from sibling tools like 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?
Opens with 'Use this when you need to remove a feature line from a script,' providing clear usage context. Mentions refusal to remove return statement, giving a boundary, but does not explicitly list alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_previewRender PreviewAInspect
Use this when you need to LOOK at a kernelCAD model — render its script to deterministic PNG views for visual self-check (the visual half of the evaluate → render → inspect → fix loop), with NO studio or dev server required. Pass { code } (inline source) or { file } (a .kcad.ts path), exactly one. Renders the canonical engineering views (front, right, top, iso — pass { views } for a subset, e.g. ["iso"] for fastest iteration) plus an optional { pose: "," } arbitrary camera angle (degrees; az=0,el=0 is front, +az rotates CCW around +Z, +el lifts the camera). NO STUDIO / DEV-SERVER REQUIRED: a prebuilt static player (dist/headless-player) is served from an ephemeral local port automatically; a running studio dev server is used as fallback, and { base_url } forces one. The only environment dependency is playwright chromium (npx playwright install chromium). Pass { focus } or { hide } (arrays of feature ids or assembly part names, mutually exclusive) to isolate parts — same semantics as kernelcad render --focus/--hide. PNGs are written to { out_dir } (default: a fresh temp session directory) and returned as absolute paths with per-view camera descriptions (kernelCAD is Z-up). Mechanism truth runs first, same protocol as kernelcad render: a broken mechanism still renders but every tile is watermarked MECHANISM BROKEN (KERNELCAD_RENDER_STRICT=1 refuses instead); read { mechanism, mechanism_failure_codes }. The probe runs full BREP interference sweeps and can dominate latency on large assemblies — pass { no_mechanism_check: true } for fast iteration (the preview then reports mechanism: "unverified"; ignored under strict mode). Returns { ok, images: [{ name, path, description }], out_dir, bounds, mechanism, render_source, render_ms, diagnostics }. PATHS ARE LOCAL to the machine running the MCP server — local stdio clients read them directly; hosted/remote clients should use open_in_studio instead.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Inline kernelCAD script source. Mutually exclusive with file. Relative imports resolve against a temp dir — use file for scripts with relative lib.fromSTEP(...) imports. | |
| file | No | Path to a .kcad.ts script on disk. Mutually exclusive with code. | |
| hide | No | Hide matching feature ids / assembly part names. Mutually exclusive with focus. | |
| pose | No | Extra arbitrary camera pose '<az>,<el>' in degrees, e.g. '30,20'. | |
| focus | No | Show only matching feature ids / assembly part names. Mutually exclusive with hide. | |
| views | No | Canonical views to render (default: all four). Fewer views = faster. | |
| width | No | Per-view tile width in px (default 768). | |
| height | No | Per-view tile height in px (default 768). | |
| out_dir | No | Directory for the PNGs (created if missing). Default: a fresh temp session dir. | |
| base_url | No | Advanced: force a specific render server (e.g. a running studio dev server) instead of the bundled static player. | |
| environment | No | HDRI environment override: preset ('studio', 'softbox', 'neutral', 'outdoor', 'warehouse'), a URL, or 'none' for the default three-light rig. | |
| no_watermark | No | Suppress the kernelCAD version watermark. | |
| no_mechanism_check | No | Skip the mechanism-truth probe for fast iteration on large assemblies; the preview reports mechanism: 'unverified'. Ignored under KERNELCAD_RENDER_STRICT=1. |
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?
Description details all side effects: writes PNGs to out_dir, returns local paths, mechanism truth runs with potential watermark, and behavior under strict mode. 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 long but front-loaded with purpose. Every sentence adds value given the tool's complexity with 13 parameters. Could be slightly more concise, but structure is logical and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers all parameters, defaults, environment dependencies, return values (including images and diagnostics), and edge cases like mechanism failure, strict mode, and local vs remote client considerations.
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?
Despite 100% schema coverage, the description adds significant meaning beyond schema: mutual exclusivity of code/file and focus/hide, pose format details, focus/hide semantics, no_mechanism_check behavior, and environment dependency on playwright.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders kernelCAD scripts to PNG views for visual self-check, using specific verbs like 'render' and 'LOOK at'. It distinguishes from siblings like open_in_studio by emphasizing no studio required.
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 LOOK at a kernelCAD model', provides alternatives (open_in_studio for hosted clients), and explains when to use code vs file parameters and when to skip mechanism check for fast iteration.
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 already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context (deterministic loop, interference checks, return of fitness verdict) 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 with essential information front-loaded: when to use and what it does, followed by output details. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and schema covers all parameters, the description provides sufficient context about the review loop, fitness verdict, and repair modes.
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 bar is baseline 3. The description adds value by explaining the purpose of designGoal and how combinatorial and samplesPerMate interact, exceeding baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reviews a mechanism for fitness and repair mode, listing specific steps like evaluating script, validating assembly, checking interferences, etc. The verb 'review' and resource 'CAD Model' are well-defined.
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.' It provides context but does not directly contrast with sibling tools like verify or inspect.
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?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds useful context: it describes the output contents (screenshot, mask, struck part names, tags), explains the default signed URL delivery and the paths_only option for base64 inlining, and clarifies authentication differences. 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 somewhat long but well-structured, front-loading the purpose and then detailing parameter behavior and authentication. Every sentence adds value, though it could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the presence of an output schema, and the provided annotations, the description covers all necessary aspects: what it does, how to use it with or without slug, authentication requirements, default values, and output format. It is sufficiently complete for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enhances understanding by explaining the 'slug' as a capability token, the default behavior of 'paths_only', and the usage of 'freshness_sec' with a default and example values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the newest brush-painted review packet from a Studio session, with a specific verb 'Return' and resource 'painted review packet'. It distinguishes from sibling tools like review_cad and get_latest_render by focusing on brush-painted feedback from a /p/<slug> link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use the slug parameter (after sharing a link, no OAuth required) versus when to omit it (fetch own latest packet, requires OAuth). Provides clear guidance on the authentication context and the intent of each usage scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paramSet ParameterAInspect
Use this when you need to edit a param() default value in a kernelCAD script. Returns the modified code as text plus diagnostics from re-evaluating the result. Caller persists the new code via standard file-write tools (this tool has no side effects).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The .kcad.ts source code. | |
| new_value | Yes | The new default value — number for numeric params, string for expressions. | |
| param_name | Yes | The string literal name of the param (first arg to param()). |
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 adds that it returns modified code and diagnostics, and explicitly states it has no side effects (caller persists). This contextualizes the behavioral traits 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 two sentences: first states the purpose, second explains output and caller responsibility. It is front-loaded with no extraneous words, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but referenced), the description does not need to detail return values. It covers the tool's action, output, and side-effect policy, making it complete for this parameter count and annotation richness.
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 further details about parameters beyond what the schema provides, but the schema descriptions are sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (edit) and resource (param() default value in a kernelCAD script). This action is distinct from all sibling tools, which focus on adding/removing features, solving, or querying.
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 edit a param() default value,' providing clear context. It also instructs that the caller must persist the code, but does not explicitly state when not to use it or list alternatives, though no sibling tool duplicates this functionality.
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 (readOnlyHint=false, destructiveHint=false) are neutral. The description adds value by disclosing that the tool replaces the return statement (a mutation), returns modified source code, and triggers re-evaluation to produce diagnostics. 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 three sentences with no redundant phrasing. It front-loads the action verb and condition, then details the two modes and output. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not detailed here), the description appropriately avoids repeating return format, but mentions 'modified source plus diagnostics from re-evaluation'. For a tool with 5 parameters and complex behavior, this is adequate though it could briefly note that diagnostics help verify correctness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, high. The description adds semantics by showing how code and assembly_binding are used in the replacement, and explains the meaning of mode, poses, and options. It provides context beyond the raw schema, such as the structure of options 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 clearly states the tool's purpose: to modify the final return statement of a script to either .model() or .solvedModel(). It specifies the verb (set), resource (scene return), and differentiates between two modes. Siblings are diverse and none overlap with this specific function.
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 advises when to use solvedModel ('for mate-authored mechanisms so FK and validation run') and implies when to use model (default case). However, it does not explicitly mention when not to use the tool or suggest 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.
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 indicate readOnlyHint=true and destructiveHint=false. The description adds that it runs a solver and returns a specific structure (status, poses, iterations) with version info. No contradiction; it provides additional 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?
The description is concise: three sentences with no wasted words. It front-loads the usage context, then the core action and return format, and finally optional parameters. Well structured and easily scannable.
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, the description adds useful detail about return types (Transform structure). It covers the core behavior and optional overrides. Missing explicit explanation of the 'assembly' parameter, but it is implied as the active assembly. Overall, sufficiently complete for this 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 50%; the description explains the 'poses' parameter ('Optional numeric pose overrides keyed by mate name'), adding meaning beyond the schema. However, the 'assembly' parameter is not described in the schema or description, so the description does not fully compensate for missing 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: to solve the mate graph and get part poses. It specifies the verb ('solve', 'get') and resource ('mate graph', 'part poses'), and distinguishes it from siblings like 'add_mate' or 'solve_sketch' by focusing on solving existing mates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('when you need to solve the mate graph and get part poses') and mentions optional overrides. However, it does not provide explicit when-not-to-use or alternatives, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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, so the description adds value by explicitly stating 'Side-effect-free' and explaining the return format (solved entities plus original constraints). This goes beyond annotations without contradicting them, providing actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise at two sentences with no wasted words. The first sentence front-loads the usage context ('Use this when...'), which is ideal for quick agent scanning. 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?
Given the tool's complexity (2 required parameters, 100% schema coverage, presence of output schema), the description adequately covers the core functionality. It explains entity types and constraint vocabulary. While it lacks examples or edge case notes, it is complete enough for a straightforward solve tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already sufficiently explains each parameter. The description adds only a high-level note ('Entities are POINT, LINE, and CIRCLE records; constraints use the kernelCAD constraint vocabulary'), which is useful but does not significantly deepen understanding beyond the schema. 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 verb 'solve' and the specific resource '2D sketch constraint set'. It uses a direct usage prompt 'Use this when you need to solve a 2D sketch constraint set' and distinguishes the tool from siblings like solve_mates by specifying the 2D nature and constraint set focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear when-to-use directive ('Use this when you need to solve a 2D sketch constraint set'). However, it does not explicitly exclude alternatives or mention contexts where this tool should not be used. The side-effect-free note implies safe usage, but there is no comparison with sibling tools like solve_mates.
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 goes far beyond annotations by disclosing three backend options, the 'auto' selection logic, accuracy honesty (opencv exact, vision-LLM 5-10% off), caller payment for LLM API, and per-feature confidence reporting. 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 well-front-loaded with the main purpose. It is slightly verbose but every sentence adds value (backends, accuracy, payment, skill pairing). Could be tightened but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, nested objects, and an output schema, the description is thorough: it covers backend dispatch, accuracy, payment, feature defaults, and pairing with a skill. Output schema exists, so return values are handled. Complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 5 parameters. The description adds significant context: backend enum explanations, default behavior for features, how maxWaypointsPerFeature caps, and hint usage. This is additive beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: trace features from a reference photo into waypoints. It uses specific verbs ('trace') and resources ('reference photo') and explains the output format. While siblings are mostly CAD operations without direct overlap, the description provides enough specificity.
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...' and details context like backends and accuracy. It does not explicitly mention when not to use it or provide alternatives, but the context is clear enough for the agent.
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 declare readOnlyHint=true and destructiveHint=false, so the description does not need to re-emphasize that. It adds value by detailing check-specific behaviors (e.g., 'run evaluate_script first' for assembly, 'fails closed on missing required params'). This goes beyond what annotations 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 well-structured with a clear opening sentence and a bulleted list of checks. It is somewhat lengthy but justified by the complexity of the tool. Could be slightly more concise by removing some redundant details already in the schema.
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 28 parameters, full schema coverage, and presence of an output schema, the description covers all major aspects: it explains the purpose, each check type, and how parameters work. It is complete for a complex verification 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?
With 100% schema coverage, the baseline is 3, but the description adds substantial context: it groups parameters by check type, explains forwarding, and gives examples of required params for each check. This helps the agent understand which parameters apply to which verification.
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 verifies designs against rule sets and lists 8 check types with specific contexts. However, it does not differentiate from sibling tools like 'inspect' or 'why_did_this_fail', which might be used for similar 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 provides when to use it ('when you need to check a design against a rule set') and explains that parameters are check-specific and fail closed. However, it does not give explicit guidance on when not to use it or suggest alternatives, which would be helpful given the numerous sibling tools.
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 declare readOnlyHint=true and destructiveHint=false. The description adds behavioral details: returns diagnostics of requested feature and upstream chain in topological order, with inline per-code hints. It does not cover performance or error scenarios, but adds meaningful 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?
The description is two concise sentences plus a parameter hint. Every sentence is informative, no fluff, and the key usage instruction is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description provides sufficient context: explains the return structure (requested + upstream diagnostics in topological order) and references lookup_diagnostics. However, it does not cover cases where no failure exists or multiple matches.
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 description must compensate. It only lists parameter names with optional indicators ('file?, code?, feature_id?'), but does not explain their meaning, format, or how they relate to the failure. This adds minimal value over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Use this when you need to trace why a feature failed', clearly specifying the verb and resource. It distinguishes from siblings like lookup_diagnostics by explaining it returns the upstream chain and mentions topological order.
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 the tool ('trace why a feature failed') and provides a clear alternative: 'call lookup_diagnostics for the full catalogue'. The context of topological order and inline hints gives clear usage context.
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!