Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CONFIG_FILENoPath to the configuration file (optional, defaults to ~/.altium-designer-mcp/config.json)

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
read_pcblibA

Read an Altium .PcbLib file: every footprint with its description, height and primitives (pads, vias, tracks, arcs, regions, fills, text, component_bodies) as structured JSON, all coordinates and dimensions in millimetres. Use it to study a library's footprint style or to fetch data for a read-modify-write. For one footprint whose name you know, get_component is cheaper; to find footprints by name pattern across libraries, search_components; for names alone, list_components. Each footprint is the same JSON shape get_component, export_library and write_pcblib use, so a footprint read here can be passed to write_pcblib or update_component as it is. Fields such as guid, unique_id, raw_tail, raw_block, raw_geometry, raw_layer_id, additional_parameters, param_key_order, primitive_order and storage_name are fidelity carriers: pass them back unchanged and the rewrite is byte-identical to the source; omit them when authoring from scratch. A list with no entries and an optional field with no value are omitted rather than empty or null. compact (default true) omits a pad's per-layer size and shape arrays when its stack_mode is Simple, since they only repeat the top-level values; set it false to see every layer. For a large library, page with limit and offset: the result reports total_count, returned_count, offset and has_more. component_name fetches one footprint and turns paging off.

read_schlibA

Read an Altium .SchLib file: every symbol with its primitives (pins, rectangles, round_rects, lines, polylines, polygons, arcs, pies, images, text_frames, beziers, ellipses, elliptical_arcs, labels, ieee_symbols), parameters and footprint links as structured JSON. Coordinates are in schematic units (10 units = 1 grid square, not mm). Use it to study a library's symbol style or to fetch data for a read-modify-write. For one symbol whose name you know, get_component is cheaper; to find symbols by name pattern across libraries, search_components; for names alone, list_components. Each symbol is the same JSON shape get_component, export_library and write_schlib use, so a symbol read here can be passed to write_schlib or update_component as it is. Fields such as unique_id, primitive_order, header_params, raw_params, all_pin_count, extra_streams and storage_name are fidelity carriers: pass them back unchanged and the rewrite is byte-identical to the source; omit them when authoring from scratch. A list with no entries and an optional field with no value are omitted rather than empty or null. For a large library, page with limit and offset: the result reports total_count, returned_count, offset and has_more. component_name fetches one symbol and turns paging off.

list_componentsA

List all component/footprint names in an Altium library file (.PcbLib or .SchLib). Supports pagination with limit/offset for large libraries. Use include_metadata for additional details like part_count and pin_count.

extract_styleA

Extract style information from an existing Altium library file. A PcbLib reports track and arc widths per layer, pad shapes, text heights and the layer usage of every primitive kind (a via counts as Multi-Layer); a SchLib reports pin lengths, stroke widths and the stroke, fill and text colours of every record kind. Use this to learn from existing libraries and create consistent new components.

write_pcblibA

Write footprints to an Altium .PcbLib file (set 'append': true to add to an existing library instead of replacing it). Each footprint is defined by its primitives: pads (with position, size, shape, layer), tracks, vias, fills, arcs, regions, text and component_bodies. The AI is responsible for calculating correct positions and sizes based on IPC-7351B or other standards. All coordinates and dimensions must be in millimetres (mm). A footprint authored without a '.Designator' text receives one on the Top Overlay automatically, just above its topmost pad, so every placed part shows its reference designator: supply your own to control its placement, or set 'auto_designator': false to omit it; a footprint echoed back from a read (carrying primitive_order) is never touched. The response 'bodies' array echoes each footprint's 3D body height and source; a footprint with no STEP model and no component body reports source 'none'. Set 'auto_3d_body': true to have an extruded placeholder body (default height 1.0 mm, flagged 'assumed_height': true) added to such footprints, then confirm or override it by supplying 'component_bodies' explicitly. The response also includes a 'warnings' array flagging silkscreen (overlay) tracks that overlap a pad (silk-on-pad) so you can move them clear. No text field may contain '|', the separator of Altium's record format, which cannot hold it.

write_schlibA

Write schematic symbols to an Altium .SchLib file (set 'append': true to add to an existing library instead of replacing it). Each symbol is defined by its primitives: pins, rectangles, round_rects, lines, polylines, polygons, arcs, pies, images, text_frames, beziers, ellipses, elliptical_arcs, labels, and text — plus its designator, parameters (Value, Manufacturer, ...) and footprint links ('footprints', name + optional library_path). Multi-part symbols set 'part_count' and tag each pin with 'owner_part_id'. Coordinates must be in schematic units (10 units = 1 grid square, not mm); a pin's (x, y) is its body-attach end and 'orientation' is the direction it points outward — the response echoes each pin's computed body_end and tip. No text field may contain '|', the separator of Altium's record format; Altium's own editor stores it as '¦' (U+00A6).

write_libpkgA

Write an Altium Library Package (.LibPkg) project file that groups source library documents (.SchLib and .PcbLib) so they can be compiled into an Integrated Library (.IntLib). Member documents are referenced by their path relative to the .LibPkg. This generates only the project source; compiling to a binary .IntLib is a one-click operation inside Altium Designer (Project > Compile Integrated Library).

delete_componentA

Delete one or more components from an Altium library file (.PcbLib or .SchLib). The file type is auto-detected from the extension. Returns status for each component: deleted, not_found, or error. Use dry_run=true to preview changes without modifying the file.

validate_libraryA

Validate an Altium library file for common issues. Checks for: empty components (no pads/pins), duplicate designators, invalid coordinates, zero-size primitives, overlapping pads, 3D bodies whose embedded model the library does not contain, embedded models no footprint references, and other integrity problems. Returns a list of warnings and errors.

export_libraryA

Export a .PcbLib or .SchLib as text in the response — nothing is written to disk. JSON carries every component in the same shape read_pcblib/read_schlib and write_pcblib/write_schlib use, plus for a PcbLib the embedded 3D models its bodies reference (embedded_models, base64 STEP data keyed by model GUID), so import_library can rebuild the library elsewhere; CSV is a summary table: name, description (and a symbol's designator), one count column per primitive kind, and the external 3D model / footprint link count. Use JSON to version-control, back up or move a library and CSV for an inventory; use read_pcblib/read_schlib instead to inspect components with pagination, and list_components with details for a quick overview.

import_libraryA

Import components from JSON data into an Altium library file. Accepts JSON in the format produced by export_library, enabling round-trip workflows: a PcbLib export's embedded_models are restored alongside the footprints, and a body whose model the data does not contain is reported in warnings. Auto-detects library type (PcbLib/SchLib) from the JSON data.

extract_step_modelA

Extract embedded STEP 3D models from an Altium .PcbLib file. Models are stored compressed inside the library and this tool extracts them to standalone .step files. Supports multiple modes: 'auto' (default), 'list', 'extract_all', or 'extract_by_footprint'.

diff_librariesA

Compare two Altium library files and report differences. Shows added, removed, and modified components. Both files must be the same type (.PcbLib or .SchLib).

batch_updateA

Perform one batch operation across all components in an Altium library file. PcbLib: 'update_track_width' (change every track of from_width to to_width, within tolerance) and 'rename_layer' (move every primitive from from_layer to to_layer). SchLib: 'update_parameters' (set parameter values across symbols). Use dry_run=true to preview changes without modifying the file.

copy_componentA

Copy/duplicate a component within an Altium library file. Creates a new component with a different name and identical primitives, but its own identity: the copy's GUIDs and unique ids are minted fresh rather than shared with the original. Useful for creating variants.

rename_componentA

Rename a component within an Altium library file. This is an atomic operation that changes the component's name while preserving all primitives and properties. More efficient than copy + delete for simple renames.

copy_component_cross_libraryA

Copy a component from one Altium library to another. Both libraries must be the same type (PcbLib to PcbLib, or SchLib to SchLib), and different files (use copy_component to duplicate within a library). The component keeps its identity, and the embedded 3D models its bodies reference travel with it; an external STEP file reference is dropped with a warning unless preserve_external_paths is true, since a path relative to the source library rarely resolves elsewhere. Useful for consolidating libraries or sharing components between projects.

merge_librariesA

Merge multiple Altium libraries into a single library. All source libraries must be the same type (all PcbLib or all SchLib). Components are copied from each source into the target library, together with the embedded 3D models their bodies reference (a model shared by several footprints is copied once; a body whose model is missing from its source is merged as-is and reported in warnings). External STEP file references are carried unchanged. Use dry_run=true to preview what would be merged.

reorder_componentsA

Reorder components in an Altium library file (.PcbLib or .SchLib). Specify the desired order as a list of component names. Components not in the list are placed at the end in their original relative order.

update_componentA

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.

search_componentsA

Search for components across multiple Altium libraries using regex or glob patterns. Returns matching component names with their source library paths. Supports both .PcbLib (footprints) and .SchLib (symbols) files.

get_componentA

Get a single component by name from an Altium library. Returns the full component data (footprint or symbol) without needing to read and filter the entire library. Supports both .PcbLib (footprints) and .SchLib (symbols) files.

component_existsA

Check if one or more components exist in an Altium library. Use this to validate component names before operations like rename, copy, or delete. Supports both .PcbLib and .SchLib files.

render_footprintA

Render an ASCII art visualisation of a footprint from a PcbLib file: every primitive kind — pads (with designators), vias, tracks, arcs, fills, regions, text marks and 3D-body outlines — each with its own marker, plus a per-kind count line and a legend. A quick preview, not a rendering.

render_symbolA

Render an ASCII-art preview of one symbol in a .SchLib — a quick visual check of a layout after authoring or editing, not a drawing to keep. Every record kind of the requested part — pins (with designators), rectangles, rounded rectangles, lines, polylines, polygons, arcs, pies, ellipses, elliptical arcs, beziers, images, text frames, labels and IEEE symbols — gets its own marker, followed by a per-kind count line and a legend. part_id picks one part of a multi-part symbol (default 1; 0 draws all parts); scale sets characters per 10 schematic units and the picture is limited to max_width x max_height characters. Coordinates are schematic units (10 units = 1 grid). Use get_component or read_schlib for exact coordinates and properties, and render_footprint for a .PcbLib footprint.

manage_schlib_parametersA

Manage the parameters of one symbol in a .SchLib (Value, Manufacturer, Part Number and the like): list them, get one, set an existing one, add a new one, or delete one. Names match without regard to case, as Altium treats them; set refuses a name the symbol lacks (use add) and add refuses one it already has (use set). Every change backs the library up to a timestamped .bak beside it (the five newest are kept) before saving, and the reply carries the parameter as stored; list returns every parameter with a count. Use get_component or read_schlib to see parameters together with the symbol's pins and graphics, update_component to rewrite a symbol wholesale, and manage_schlib_footprints for footprint links, which are models rather than parameters.

manage_schlib_footprintsA

Manage the footprint links (PCB models) of one symbol in a .SchLib: list them, add one, or remove one. A link names a .PcbLib footprint; add refuses a name already linked and remove refuses one that is not (names match without regard to case), and neither touches the .PcbLib itself. Give library_path on add when Altium should resolve and preview the footprint from a specific library; omit it to link by name only. Every change backs the library up to a timestamped .bak beside it (the five newest are kept) before saving. Use manage_schlib_parameters for parameters such as Value, get_component or read_schlib to see the links together with the rest of the symbol, and update_component to rewrite a symbol wholesale.

compare_componentsA

Compare two named components — from one library or two of the same type (.PcbLib with .PcbLib, .SchLib with .SchLib) — and report every difference: description and parameters, then per primitive kind: pads, vias, tracks, arcs, regions, text, fills and 3D bodies of a footprint; pins, every graphic shape, parameters and footprint links of a symbol. Geometry compares within tolerance (mm, default 0.001) and unmatched items are reported per side; include_geometry false compares counts and properties only. Identity (GUIDs, unique ids) is never a difference. Read-only; returns identical, difference_count, the differences and per-kind count summaries. Use diff_libraries first to find which components differ between two whole libraries, then this tool on one pair; use get_component for one component's full data rather than a comparison.

repair_libraryA

Repair a PcbLib by removing orphaned 3D-model data: (1) embedded models not referenced by any footprint, and (2) component body references that point to non-existent models. This fixes libraries where STEP model data is missing but references remain (validate_library reports both conditions). PcbLib only; a SchLib is refused.

list_backupsA

List available backup files for an Altium library. Shows timestamped .bak files that were automatically created before write operations.

restore_backupA

Restore an Altium library file from a backup. If no specific backup is specified, restores from the most recent backup. The current file is snapshotted as a new backup first (reported as pre_restore_backup), so a wrong pick is itself reversible, and the restore is written atomically.

bulk_renameA

Rename multiple components in a library using regex pattern matching. Supports capture groups for flexible renaming (e.g., 'RESC(.*)' -> 'RES_$1').

update_padA

Update specific properties of a pad in a PcbLib footprint without replacing the entire component. Find pad by designator and apply only the specified updates. On a stacked pad (stack_mode other than simple) a width/height/shape change also reaches the per-layer tables: layers that shared the old primary value follow it, layers with their own value keep it, and the response reports how many followed.

update_primitiveA

Update specific properties of a primitive (track, arc, text, fill, region or via) in a PcbLib footprint. Find the primitive by type and index (its position in read_pcblib's list for that type), apply only the specified updates. Moving a primitive to another layer drops the layer carriers it was read with (a region's v7_layer, an unmapped raw_layer_id) so the new layer's own token is written. On a stacked via (diameter_stack_mode other than simple) a diameter change also reaches per_layer_diameters: layers that shared the old diameter follow it, layers with their own value keep it, and the response reports how many followed.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 34 tools

Disambiguation4/5

Each tool has a distinct responsibility and the descriptions cross-reference alternatives extensively. However, clusters such as copy_component vs copy_component_cross_library and update_component/update_primitive/update_pad/batch_update require careful reading to choose correctly.

Naming Consistency4/5

Most tools follow a consistent snake_case verb_noun pattern like read_pcblib, write_schlib, delete_component, and restore_backup. Minor deviations such as component_exists, batch_update, and bulk_rename are still predictable and do not create chaos.

Tool Count2/5

34 tools is a large surface that exceeds the 25+ threshold, making selection harder than necessary. Several specialized variants such as update_pad vs update_primitive, copy_component vs copy_component_cross_library, and rename_component vs bulk_rename could plausibly be consolidated.

Completeness5/5

The suite covers the full lifecycle of Altium libraries: read, search, create, update, delete, copy, rename, reorder, merge, compare, validate, repair, backup/restore, import/export, and rendering. There are no obvious dead ends, and read-modify-write workflows are explicitly supported with fidelity-preserving fields.

Maintenance

ActivityActive
ResponsivenessResponsive