Skip to main content
Glama

Update a component in place

update_component
Destructive

Replace a component in an Altium .PcbLib or .SchLib library with a supplied object while preserving its position; preview changes with dry-run before saving.

Instructions

Replace one existing component of an Altium library (.PcbLib or .SchLib) with the object given, keeping its position in the library. component_name must name a component the library holds, in any case; a name it does not hold is an error listing the available ones. Provide footprint for a .PcbLib or symbol for a .SchLib, in the shape write_pcblib or write_schlib takes: the object replaces the stored component wholesale, so a primitive left out is removed — start from get_component's output when editing. A name in the object that differs from component_name renames the component as well; a name another component already holds is refused, and an object without a name keeps the stored one. dry_run true changes nothing and reports would_rename and a changes list (description, primitive counts per kind); a real run backs the file up, saves, and returns renamed, old_description, component_count and a post-write validation. Alternatives: write_pcblib or write_schlib to rewrite a whole library, batch_update for one change across every component (track widths, a layer, a parameter), update_pad or update_primitive to change one primitive in place, rename_component for a rename alone.

Input Schema

NameRequiredDescriptionDefault
symbolNoFor SchLib: the symbol to store, in the shape write_schlib takes per symbols entry
dry_runNoIf true, show what would be updated without actually modifying the file
filepathYesPath to the .PcbLib or .SchLib file
footprintNoFor PcbLib: the footprint to store, in the shape write_pcblib takes per footprints entry
component_nameYesName of the component to update (must exist in library)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.4.0
    • changedInput schema / properties / symbol / properties / pins / items / properties / function_params / description
      Previous value: -"The pin's PinFunctionData entry as read_schlib emitted it, [key, value] string pairs in stored order: the defined functions and what else Altium keeps there, such as the function a schematic selected (PINSELECTEDFUNCTIONSCOUNT, PINSELECTEDFUNCTIONn). It goes back as read while functions is unchanged; edit functions, not this. Pass back unchanged; omit when authoring."New value: +"The pin's PinFunctionData entry as read_schlib emitted it, [key, value] string pairs in stored order. It goes back as read while functions and selected_functions are unchanged; edit those, not this. Pass back unchanged; omit when authoring."
    • addedInput schema / properties / symbol / properties / pins / items / properties / selected_functions
      Added value: +{
      +  "description": "The functions preselected for the pin, in order: active on every new placement of the symbol until a schematic picks others (usually some of functions). Altium's own pin dialog cannot set these; a library made from a schematic keeps what it selected. A name may not be empty or contain '|'. Omit for a pin with none.",
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed6 schema fields changedv1.3.1
    • addedInput schema / properties / footprint / properties / component_bodies / items / properties / mil_values_as_read
      Added value: +{
      +  "description": "The body's mil-valued parameters as [key, value] string pairs exactly as read_pcblib emitted them (OVERALLHEIGHT=11.8898mil, say), so a length goes back in Altium's text while it holds the same value; the millimetre fields round to 6 decimals, which would otherwise come back as 11.889803mil. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / footprint / properties / primitive_guids_as_read
      Added value: +{
      +  "description": "Base64 of the footprint's PrimitiveGuids/Data stream exactly as read_pcblib emitted it. Altium orders its records its own way; the stream goes back in that order while it holds exactly the records the primitives carry, and is rebuilt in primitive order otherwise. Pass back unchanged; omit when authoring.",
      +  "type": "string"
      +}
    • changedInput schema / properties / footprint / properties / text / items / properties / stroke_font / description
      Previous value: -"Stroke font selection (only meaningful when kind is \"stroke\"). Default: default (Altium's built-in stroke font)"New value: +"Stroke font selection: it draws the text while kind is \"stroke\", and a TrueType or barcode text keeps the one it switches back to (read_pcblib reports it for every kind; pass it back unchanged). Default: default (Altium's built-in stroke font)"
    • changedInput schema / properties / symbol / properties / extra_streams / description
      Previous value: -"Streams of the symbol's storage this tool does not model (a PinFunctionData from a newer Altium, say) as [name, base64] pairs, exactly as read_schlib emitted them; written back beside the modelled ones so nothing Altium stored is dropped. Pass back unchanged; omit when authoring."New value: +"Streams of the symbol's storage this tool does not model (a PinTextData, say) as [name, base64] pairs, exactly as read_schlib emitted them; written back beside the modelled ones so nothing Altium stored is dropped. Pass back unchanged; omit when authoring."
    • addedInput schema / properties / symbol / properties / pins / items / properties / function_params
      Added value: +{
      +  "description": "The pin's PinFunctionData entry as read_schlib emitted it, [key, value] string pairs in stored order: the defined functions and what else Altium keeps there, such as the function a schematic selected (PINSELECTEDFUNCTIONSCOUNT, PINSELECTEDFUNCTIONn). It goes back as read while functions is unchanged; edit functions, not this. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / symbol / properties / pins / items / properties / functions
      Added value: +{
      +  "description": "The pin's functions, in order: Altium's Functions property, the peripheral roles a microcontroller pin can take (e.g. [\"PA9\", \"USART1_TX\", \"TIM1_CH2\"]), from which a schematic picks the one it uses. Stored in the symbol's PinFunctionData stream. A name may not be empty or contain '|'. Omit for a pin with none.",
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Changed37 schema fields changedv1.3.0
    • addedInput schema / properties / footprint / properties / carried_streams
      Added value: +{
      +  "description": "Streams of the footprint's storage this tool does not model (PrimitiveParameters with the footprint's Pin Count / Pitch / Mount parameters, ExtendedPrimitiveInformation/Data with region mask expansions, CornerRadiusChamfer, CustomMaskShapes, SharedUnion, …) as [path, base64] pairs, exactly as read_pcblib emitted them. They go back as read while the footprint keeps the primitive sequence in carried_streams_sequence (they name primitives by position); otherwise they are dropped with a warning. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / footprint / properties / carried_streams_sequence
      Added value: +{
      +  "description": "The primitive kinds, in stream order, the footprint held when carried_streams were read. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "enum": [
      +      "arc",
      +      "pad",
      +      "via",
      +      "track",
      +      "text",
      +      "region",
      +      "fill",
      +      "component_body"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / footprint / properties / component_bodies / items / properties / flags
      Added value: +{
      +  "description": "Primitive flags (optional). Accepts the name string read_pcblib emits (e.g. \"LOCKED\") or a raw bitmask integer (1=locked, 2=polygon, 4=keepout, 8=tenting-top, 16=tenting-bottom, 32=testpoint-top, 64=testpoint-bottom; 128 and above are on-disk bits read_pcblib carries verbatim as DISK_BIT_n — pass them back unchanged). A locked body is one Altium will not let you move. Default: none",
      +  "minimum": 0,
      +  "type": [
      +    "string",
      +    "integer"
      +  ]
      +}
    • addedInput schema / properties / footprint / properties / component_bodies / items / properties / model_type
      Added value: +{
      +  "description": "MODEL.MODELTYPE as read_pcblib emitted it: 0 extruded, 1 a model file, 2 a cylinder, 3 a sphere (a cylinder's or sphere's dimensions travel in additional_parameters). Pass back unchanged; omit when authoring (0 for a body with no model file, 1 otherwise).",
      +  "maximum": 255,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / footprint / properties / pads / items / properties / raw_size_shape_basis
      Added value: +{
      +  "description": "16 hex digits: the fingerprint of the size/shape block the pad built when read (see raw_size_shape_block). Pass back unchanged; omit when authoring.",
      +  "type": "string"
      +}
    • addedInput schema / properties / footprint / properties / pads / items / properties / raw_size_shape_block
      Added value: +{
      +  "description": "Base64 of a simple pad's size/shape block exactly as read_pcblib emitted it. It goes back as read while the pad still builds the block it was read with (raw_size_shape_basis), keeping per-layer entries this tool does not model; an edited pad writes the block it builds. Pass back unchanged; omit when authoring.",
      +  "type": "string"
      +}
    • addedInput schema / properties / symbol / properties / aliases
      Added value: +{
      +  "description": "Other library references the symbol answers to, as the library header lists them (Altium quotes a name holding a space, e.g. \"CAPACITOR NON-POL\"). Kept on every rewrite. Pass back unchanged; edit to add or remove an alias.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / symbol / properties / beziers / items / properties / extra_points
      Added value: +{
      +  "description": "Points past the fourth ({x, y} objects, X5/Y5 onward), as read_schlib emits them for a curve Altium stored with more than four points. Pass back unchanged; omit for a plain cubic.",
      +  "items": {
      +    "properties": {
      +      "x": {
      +        "type": "number"
      +      },
      +      "y": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "x",
      +      "y"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / symbol / properties / designator_params
      Added value: +{
      +  "description": "The designator record (RECORD=34) segments as [key, value] string pairs in stored order, exactly as read_schlib emitted them: its own FontID, ReadOnlyState, OwnerPartId and Color go back as read, while designator, designator_x/y and designator_unique_id stay editable. Pass back unchanged; omit when authoring (the canonical record is written).",
      +  "items": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / symbol / properties / footprints / items / properties / datafile_link_records
      Added value: +{
      +  "description": "Text records owned by the link's datafile record (RECORD=46), such as a RECORD=47 pin-map definer, each an array of [key, value] string pairs, as read_schlib emitted them. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "items": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "minItems": 2,
      +      "type": "array"
      +    },
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / symbol / properties / footprints / items / properties / implementation_records
      Added value: +{
      +  "description": "Text records owned by the link's implementation record (RECORD=48), such as Altium 365's hidden Available Preview Images parameter, each an array of [key, value] string pairs, as read_schlib emitted them. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "items": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "minItems": 2,
      +      "type": "array"
      +    },
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / symbol / properties / footprints / items / properties / is_current / description
      Previous value: -"Whether this is the current (default) footprint model (IsCurrent=T). Read-preserved; on write the first model is emitted as current. Default: false"New value: +"Whether this is the current (default) model of its type (IsCurrent=T). Read-preserved; when no footprint is current, the first footprint is written as current. Default: false"
    • addedInput schema / properties / symbol / properties / footprints / items / properties / model_type
      Added value: +{
      +  "description": "The link's ModelType when it is not a footprint, as read_schlib emitted it: SIM (a simulation model), SI (signal integrity), PCB3DLib (a 3D model). Such a link is carried as Altium stored it and is not a footprint: manage_schlib_footprints add/remove leave it alone. Pass back unchanged; omit for a footprint.",
      +  "type": "string"
      +}
    • changedInput schema / properties / symbol / properties / parameters / items / properties / read_only_state / description
      Previous value: -"Read-only state (0=editable, 1=read-only). Default: 0"New value: +"Altium's lock state for the parameter (ReadOnlyState): 0=editable; Altium sets it from the Name and Value Lock options of Parameter Properties, and Altium-authored libraries store 1 and 3. Pass back the value read_schlib reported. Default: 0"
    • changedInput schema / properties / symbol / properties / parameters / items / properties / read_only_state / maximum
      Previous value: -1New value: +3
    • addedInput schema / properties / symbol / properties / pins / items / properties / owned_records
      Added value: +{
      +  "description": "Text records Altium stores as this pin's children (a pin parameter such as Name=Order), each an array of [key, value] string pairs in stored order, as read_schlib emitted them; written back after the pin with OwnerIndex pointing at it. Pass back unchanged; omit when authoring.",
      +  "items": {
      +    "items": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "minItems": 2,
      +      "type": "array"
      +    },
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_inner_edge / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "none",
      +      "dot",
      +      "right_left_signal_flow",
      +      "clock",
      +      "active_low_input",
      +      "analog_signal_in",
      +      "not_logic_connection",
      +      "shift_right",
      +      "postponed_output",
      +      "open_collector",
      +      "hi_z",
      +      "high_current",
      +      "pulse",
      +      "schmitt",
      +      "delay",
      +      "group_line",
      +      "group_binary",
      +      "active_low_output",
      +      "pi",
      +      "greater_equal",
      +      "less_equal",
      +      "sigma",
      +      "open_collector_pull_up",
      +      "open_emitter",
      +      "open_emitter_pull_up",
      +      "digital_signal_in",
      +      "and",
      +      "invertor",
      +      "or",
      +      "xor",
      +      "shift_left",
      +      "input_output",
      +      "open_output",
      +      "left_right_signal_flow",
      +      "bidirectional_signal_flow"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "maximum": 255,
      +    "minimum": 0,
      +    "type": "integer"
      +  }
      +]
    • removedInput schema / properties / symbol / properties / pins / items / properties / symbol_inner_edge / enum
      Removed value: -[
      -  "none",
      -  "dot",
      -  "right_left_signal_flow",
      -  "clock",
      -  "active_low_input",
      -  "analog_signal_in",
      -  "not_logic_connection",
      -  "postponed_output",
      -  "open_collector",
      -  "hi_z",
      -  "high_current",
      -  "pulse",
      -  "schmitt",
      -  "active_low_output",
      -  "open_collector_pull_up",
      -  "open_emitter",
      -  "open_emitter_pull_up",
      -  "digital_signal_in",
      -  "shift_left",
      -  "open_output",
      -  "left_right_signal_flow",
      -  "bidirectional_signal_flow"
      -]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_inner_edge / maximum
      Added value: +255
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_inner_edge / minimum
      Added value: +0
    • changedInput schema / properties / symbol / properties / pins / items / properties / symbol_inner_edge / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "integer"
      +]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_inside / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "none",
      +      "dot",
      +      "right_left_signal_flow",
      +      "clock",
      +      "active_low_input",
      +      "analog_signal_in",
      +      "not_logic_connection",
      +      "shift_right",
      +      "postponed_output",
      +      "open_collector",
      +      "hi_z",
      +      "high_current",
      +      "pulse",
      +      "schmitt",
      +      "delay",
      +      "group_line",
      +      "group_binary",
      +      "active_low_output",
      +      "pi",
      +      "greater_equal",
      +      "less_equal",
      +      "sigma",
      +      "open_collector_pull_up",
      +      "open_emitter",
      +      "open_emitter_pull_up",
      +      "digital_signal_in",
      +      "and",
      +      "invertor",
      +      "or",
      +      "xor",
      +      "shift_left",
      +      "input_output",
      +      "open_output",
      +      "left_right_signal_flow",
      +      "bidirectional_signal_flow"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "maximum": 255,
      +    "minimum": 0,
      +    "type": "integer"
      +  }
      +]
    • removedInput schema / properties / symbol / properties / pins / items / properties / symbol_inside / enum
      Removed value: -[
      -  "none",
      -  "dot",
      -  "right_left_signal_flow",
      -  "clock",
      -  "active_low_input",
      -  "analog_signal_in",
      -  "not_logic_connection",
      -  "postponed_output",
      -  "open_collector",
      -  "hi_z",
      -  "high_current",
      -  "pulse",
      -  "schmitt",
      -  "active_low_output",
      -  "open_collector_pull_up",
      -  "open_emitter",
      -  "open_emitter_pull_up",
      -  "digital_signal_in",
      -  "shift_left",
      -  "open_output",
      -  "left_right_signal_flow",
      -  "bidirectional_signal_flow"
      -]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_inside / maximum
      Added value: +255
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_inside / minimum
      Added value: +0
    • changedInput schema / properties / symbol / properties / pins / items / properties / symbol_inside / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "integer"
      +]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_outer_edge / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "none",
      +      "dot",
      +      "right_left_signal_flow",
      +      "clock",
      +      "active_low_input",
      +      "analog_signal_in",
      +      "not_logic_connection",
      +      "shift_right",
      +      "postponed_output",
      +      "open_collector",
      +      "hi_z",
      +      "high_current",
      +      "pulse",
      +      "schmitt",
      +      "delay",
      +      "group_line",
      +      "group_binary",
      +      "active_low_output",
      +      "pi",
      +      "greater_equal",
      +      "less_equal",
      +      "sigma",
      +      "open_collector_pull_up",
      +      "open_emitter",
      +      "open_emitter_pull_up",
      +      "digital_signal_in",
      +      "and",
      +      "invertor",
      +      "or",
      +      "xor",
      +      "shift_left",
      +      "input_output",
      +      "open_output",
      +      "left_right_signal_flow",
      +      "bidirectional_signal_flow"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "maximum": 255,
      +    "minimum": 0,
      +    "type": "integer"
      +  }
      +]
    • removedInput schema / properties / symbol / properties / pins / items / properties / symbol_outer_edge / enum
      Removed value: -[
      -  "none",
      -  "dot",
      -  "right_left_signal_flow",
      -  "clock",
      -  "active_low_input",
      -  "analog_signal_in",
      -  "not_logic_connection",
      -  "postponed_output",
      -  "open_collector",
      -  "hi_z",
      -  "high_current",
      -  "pulse",
      -  "schmitt",
      -  "active_low_output",
      -  "open_collector_pull_up",
      -  "open_emitter",
      -  "open_emitter_pull_up",
      -  "digital_signal_in",
      -  "shift_left",
      -  "open_output",
      -  "left_right_signal_flow",
      -  "bidirectional_signal_flow"
      -]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_outer_edge / maximum
      Added value: +255
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_outer_edge / minimum
      Added value: +0
    • changedInput schema / properties / symbol / properties / pins / items / properties / symbol_outer_edge / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "integer"
      +]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_outside / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "none",
      +      "dot",
      +      "right_left_signal_flow",
      +      "clock",
      +      "active_low_input",
      +      "analog_signal_in",
      +      "not_logic_connection",
      +      "shift_right",
      +      "postponed_output",
      +      "open_collector",
      +      "hi_z",
      +      "high_current",
      +      "pulse",
      +      "schmitt",
      +      "delay",
      +      "group_line",
      +      "group_binary",
      +      "active_low_output",
      +      "pi",
      +      "greater_equal",
      +      "less_equal",
      +      "sigma",
      +      "open_collector_pull_up",
      +      "open_emitter",
      +      "open_emitter_pull_up",
      +      "digital_signal_in",
      +      "and",
      +      "invertor",
      +      "or",
      +      "xor",
      +      "shift_left",
      +      "input_output",
      +      "open_output",
      +      "left_right_signal_flow",
      +      "bidirectional_signal_flow"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "maximum": 255,
      +    "minimum": 0,
      +    "type": "integer"
      +  }
      +]
    • changedInput schema / properties / symbol / properties / pins / items / properties / symbol_outside / description
      Previous value: -"Decoration drawn outside the pin line, e.g. 'right_left_signal_flow', 'analog_signal_in'. Default: none"New value: +"Decoration drawn outside the pin line, e.g. 'right_left_signal_flow', 'analog_signal_in'. Every slot takes any of Altium's IEEE symbol names, or the stored id (0-255) — read_schlib emits an id past its table as the bare number. Default: none"
    • removedInput schema / properties / symbol / properties / pins / items / properties / symbol_outside / enum
      Removed value: -[
      -  "none",
      -  "dot",
      -  "right_left_signal_flow",
      -  "clock",
      -  "active_low_input",
      -  "analog_signal_in",
      -  "not_logic_connection",
      -  "postponed_output",
      -  "open_collector",
      -  "hi_z",
      -  "high_current",
      -  "pulse",
      -  "schmitt",
      -  "active_low_output",
      -  "open_collector_pull_up",
      -  "open_emitter",
      -  "open_emitter_pull_up",
      -  "digital_signal_in",
      -  "shift_left",
      -  "open_output",
      -  "left_right_signal_flow",
      -  "bidirectional_signal_flow"
      -]
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_outside / maximum
      Added value: +255
    • addedInput schema / properties / symbol / properties / pins / items / properties / symbol_outside / minimum
      Added value: +0
    • changedInput schema / properties / symbol / properties / pins / items / properties / symbol_outside / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "integer"
      +]
  4. Changed2 schema fields changedv1.2.0
    • addedInput schema / properties / symbol / properties / images / items / properties / image_compressed
      Added value: +{
      +  "description": "Set by read_schlib only for an image whose compressed /Storage entry this server would not reproduce (another writer's zlib): the entry exactly as read, reused while it still holds image_data. Pass back unchanged; omit when authoring or replacing an image.",
      +  "type": "string"
      +}
    • addedInput schema / properties / symbol / properties / pins / items / properties / name_code_page
      Added value: +{
      +  "description": "Set by read_schlib on a pin a script authored: the ANSI code page its name was widened through, so a rewrite stores the name as Altium did. Pass back unchanged; omit when authoring.",
      +  "enum": [
      +    874,
      +    1250,
      +    1251,
      +    1252,
      +    1253,
      +    1254,
      +    1255,
      +    1256,
      +    1257,
      +    1258
      +  ],
      +  "maximum": 1258,
      +  "minimum": 874,
      +  "type": "integer"
      +}
  5. Changed4 schema fields changedv1.1.0
    • changedInput schema / properties / footprint / properties / component_bodies / items / properties / identifier / description
      Previous value: -"The body's IDENTIFIER, a user-visible name (any Unicode; stored as code points on disk). Default: empty"New value: +"The body's IDENTIFIER, a user-visible name (any Unicode; stored as UTF-16 code units on disk). Default: empty"
    • addedInput schema / properties / footprint / properties / pads / items / properties / polygon_connect
      Added value: +{
      +  "description": "The pad's own polygon-connect style (Altium: Pad Stack > Thermal Relief), overriding the design rules for how a polygon pour joins the pad. Omit to follow the rules (the default); a key left out takes Altium's default.",
      +  "properties": {
      +    "air_gap": {
      +      "description": "Gap between the pad and the pour in mm. Default: 0.254 (10 mil)",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "auto_conductors": {
      +      "description": "Let Altium choose the conductor count. Default: false",
      +      "type": "boolean"
      +    },
      +    "conductor_width": {
      +      "description": "Width of each relief conductor in mm. Default: 0.254 (10 mil)",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "conductors": {
      +      "description": "Number of relief conductors. Default: 4",
      +      "enum": [
      +        2,
      +        4
      +      ],
      +      "maximum": 4,
      +      "minimum": 2,
      +      "type": "integer"
      +    },
      +    "min_distance": {
      +      "description": "Minimum distance used with auto_conductors when min_distance_enabled is set, in mm. Default: 0.381 (15 mil)",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "min_distance_enabled": {
      +      "description": "Apply min_distance (Altium's Min Distance checkbox). Default: false",
      +      "type": "boolean"
      +    },
      +    "rotation": {
      +      "description": "Conductor angle in degrees. Default: 90",
      +      "enum": [
      +        45,
      +        90
      +      ],
      +      "maximum": 90,
      +      "minimum": 45,
      +      "type": "integer"
      +    },
      +    "style": {
      +      "description": "How the pour joins the pad. Default: relief",
      +      "enum": [
      +        "relief",
      +        "direct",
      +        "no_connect"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / footprint / properties / regions / items / properties / raw_contours
      Added value: +{
      +  "description": "Base64 of the region's contour bytes exactly as read_pcblib emitted them (outline and hole vertices). Altium stores a vertex as a double in internal units and a poured polygon's copper sits on fractional ones, so the bytes are replayed while they still describe the vertices above; an edited outline drops them. Pass back unchanged; omit when authoring.",
      +  "type": "string"
      +}
    • addedInput schema / properties / footprint / properties / vias / items / properties / polygon_connect
      Added value: +{
      +  "description": "The via's own polygon-connect style (Altium: Pad Stack > Thermal Relief), overriding the design rules for how a polygon pour joins the via. Omit to follow the rules (the default); a key left out takes Altium's default.",
      +  "properties": {
      +    "air_gap": {
      +      "description": "Gap between the via and the pour in mm. Default: 0.254 (10 mil)",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "auto_conductors": {
      +      "description": "Let Altium choose the conductor count. Default: false",
      +      "type": "boolean"
      +    },
      +    "conductor_width": {
      +      "description": "Width of each relief conductor in mm. Default: 0.254 (10 mil)",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "conductors": {
      +      "description": "Number of relief conductors. Default: 4",
      +      "enum": [
      +        2,
      +        4
      +      ],
      +      "maximum": 4,
      +      "minimum": 2,
      +      "type": "integer"
      +    },
      +    "min_distance": {
      +      "description": "Minimum distance used with auto_conductors when min_distance_enabled is set, in mm. Default: 0.381 (15 mil)",
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "min_distance_enabled": {
      +      "description": "Apply min_distance (Altium's Min Distance checkbox). Default: false",
      +      "type": "boolean"
      +    },
      +    "rotation": {
      +      "description": "Conductor angle in degrees. Default: 90",
      +      "enum": [
      +        45,
      +        90
      +      ],
      +      "maximum": 90,
      +      "minimum": 45,
      +      "type": "integer"
      +    },
      +    "style": {
      +      "description": "How the pour joins the via. Default: relief",
      +      "enum": [
      +        "relief",
      +        "direct",
      +        "no_connect"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  6. Changed3 schema fields changedv1.0.5
    • addedInput schema / properties / footprint / properties / additional_parameters
      Added value: +{
      +  "description": "The footprint's Parameters keys other than HEIGHT, captured verbatim on read whenever the block is not the plain five-key block this tool writes from scratch: the PATTERN and DESCRIPTION bytes, the UNICODE twins that carry a name or description outside ASCII, the item and revision GUIDs of a managed footprint, a UI-authored AREA, and any key a newer Altium version writes. Each entry is a [key, value] string pair. Pass back unchanged on a read-modify-write so nothing is dropped (a PATTERN, DESCRIPTION or twin that no longer matches the name or description is rebuilt from it); omit when authoring, or to have the block rebuilt in Altium's current shape.",
      +  "items": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / footprint / properties / height
      Added value: +{
      +  "description": "Overall component height in mm — Altium's HEIGHT parameter, written as its mil string. Default: 0",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / footprint / properties / param_key_order
      Added value: +{
      +  "description": "The footprint's Parameters keys in stored order, as read_pcblib emitted them; the writer replays this order so the block stays byte-faithful. Pass back unchanged; omit when authoring (canonical order).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / footprint / properties / storage_name
      Added value: +{
      +  "description": "The CFB storage the component was read from, as read_pcblib/read_schlib emit it. Pass it back unchanged on a read-modify-write so the component stays where Altium looks for it (Altium re-derives a short name's storage and maps a long one through SectionKeys, so a moved storage is a component it cannot load); omit when authoring or renaming, and the storage name is derived as Altium would: / \\ : ! * become _, then a cut at 31 characters.",
      +  "type": "string"
      +}
    • addedInput schema / properties / symbol / properties / storage_name
      Added value: +{
      +  "description": "The CFB storage the component was read from, as read_pcblib/read_schlib emit it. Pass it back unchanged on a read-modify-write so the component stays where Altium looks for it (Altium re-derives a short name's storage and maps a long one through SectionKeys, so a moved storage is a component it cannot load); omit when authoring or renaming, and the storage name is derived as Altium would: / \\ : ! * become _, then a cut at 31 characters.",
      +  "type": "string"
      +}
  8. First observedv0.1.0

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=false, and the description corroborates and enriches that: wholesale replacement ("a primitive left out is removed"), a backup before write, post-write validation, and a non-existent-name error that lists the available components. What it does not cover is concurrency/locking, file-size or rate constraints, or what happens if the file is open in Altium - moderate gaps for a destructive file mutation.

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 action and scope, then error/rename behaviors, then dry-run vs real-run, then alternatives - a sensible order. It is a dense single paragraph of long compound sentences, so a few clauses (e.g. the parenthetical detail on the changes list) could be trimmed, but nothing is redundant with the schema.

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 five-parameter, deeply nested, destructive write tool with no output schema, the description covers the missing return-value surface itself: dry_run reports would_rename plus a changes list of description and per-kind primitive counts; a real run returns renamed, old_description, component_count and validation. Combined with the sibling routing, an agent can call this correctly without further context.

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 the baseline is 3, but the description genuinely adds meaning: component_name matches case-insensitively and errors with the available names, symbol vs footprint selection depends on the file extension, and a matching/differing name in the object drives an implicit rename with collision refusal. It stops short of explaining how partial objects are merged (only "left out is removed"), which is the one semantic an agent most needs.

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?

The opening sentence names a specific verb and resource ("Replace one existing component of an Altium library (.PcbLib or .SchLib)") and adds the distinguishing scope "keeping its position in the library". It is immediately separable from write_pcblib (whole-library rewrite) and rename_component (rename only), both of which it names.

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

Usage Guidelines5/5

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

The Alternatives sentence is an explicit routing table: write_pcblib/write_schlib for a whole library, batch_update for one change across every component, update_pad/update_primitive for a single primitive, rename_component for a rename alone. It also states the prerequisite workflow ("start from get_component's output when editing") and when-not to use it under dry_run.

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