Skip to main content
Glama

Add Part

add_part
Idempotent

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.

Input Schema

NameRequiredDescriptionDefault
atNoOptional [x, y, z] assembly placement.
codeYesThe .kcad.ts source code.
part_nameYesAssembly-unique part name.
binding_nameNoOptional JS const name for the returned AssemblyPartRef. Defaults to a part-name-derived identifier.
assembly_bindingYesJS identifier bound to assembly(...), e.g. "arm".
shape_expressionYesJS expression for the Shape to pass to assembly.part, inserted verbatim.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedOutput schema / properties
      Removed value: -{
      -  "binding_name": {
      -    "description": "JS const name bound to the new construct (when one was created).",
      -    "type": "string"
      -  },
      -  "diagnostics": {
      -    "description": "Diagnostics from re-evaluating the modified source.",
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "error": {
      -    "description": "Failure message (present when ok is false).",
      -    "type": "string"
      -  },
      -  "new_code": {
      -    "description": "Modified .kcad.ts source (present on success). Caller persists it.",
      -    "type": "string"
      -  },
      -  "ok": {
      -    "description": "Whether the edit applied and re-evaluated cleanly.",
      -    "type": "boolean"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "ok"
      -]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "binding_name": {
      +      "description": "JS const name bound to the new construct (when one was created).",
      +      "type": "string"
      +    },
      +    "diagnostics": {
      +      "description": "Diagnostics from re-evaluating the modified source.",
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "error": {
      +      "description": "Failure message (present when ok is false).",
      +      "type": "string"
      +    },
      +    "new_code": {
      +      "description": "Modified .kcad.ts source (present on success). Caller persists it.",
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "Whether the edit applied and re-evaluated cleanly.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  3. Added

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: where the code is inserted, that the operation is side-effect-free, that the caller must persist the returned source, and that diagnostics come from re-evaluating. One gap remains: annotations claim idempotentHint=true, but the description never explains how a repeated insert avoids duplicating the const binding, leaving that trait unverified by the text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering condition, then the precise edit, then side-effect/return behavior — a sensible order. The first sentence is slightly redundant with the tool name, but the remaining content is dense and earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity source-transformation tool, everything needed to call it correctly is present: insertion location, immutability contract, persistence responsibility, and what comes back. With an output schema covering return shape, the description need not detail diagnostics structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description earns an extra point by mapping parameters into the emitted template (`partName`, `shapeExpression`, `opts?`=the `at` placement) and clarifying that the shape expression is inserted verbatim. It still doesn't explain the defaulting behavior of binding_name, but the schema already documents that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('add a part to an assembly') and then pins the exact resource-level effect: inserting a `const <binding> = <assembly>.part(...)` line before the final top-level return. An agent can tell this apart from add_feature/add_mate/add_connector by the code-transformation framing, even without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when you need to add a part to an assembly' gives a clear triggering condition, and the insertion-point detail further constrains legitimate use. It stops short of naming alternatives or exclusions (e.g. vs add_feature or add_mate), so it is clear context but not full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.