Skip to main content
Glama

altium-designer-mcp

CI codecov

Let an AI build your Altium libraries — it does the engineering, this tool writes the files.

An MCP server that gives AI assistants (Claude Code, Claude Desktop, Google Antigravity, VSCode Copilot) file I/O and primitive-placement tools for Altium Designer .PcbLib (footprint) and .SchLib (symbol) libraries — so the AI can create and maintain any component, not just pre-programmed packages.


The Problem

Building Altium component libraries by hand is slow and repetitive — every footprint means looking up IPC-7351B pad sizes, courtyards, and silkscreen, then placing each primitive by hand. AI assistants are excellent at exactly that reasoning, but they cannot write Altium's binary .PcbLib/.SchLib files — an undocumented OLE compound format that is easy to corrupt, and Altium silently refuses to open a malformed file.

Approach

Problem

Draw every footprint by hand in Altium

Slow and repetitive; the AI can't touch the file

Ask an AI to emit the binary file directly

It produces a corrupt file Altium won't open

Pre-programmed footprint generators

Only the package types someone coded in advance


Related MCP server: mcp-server-kicad

The Core Idea

The AI handles the intelligence. The tool handles file I/O.

Responsibility

Owner

IPC-7351B calculations

AI

Package layout decisions

AI

Style choices

AI

Datasheet interpretation

AI

Reading/writing Altium files

This tool

Primitive placement

This tool

STEP model attachment

This tool

This means the AI can create any footprint — not just pre-programmed package types. See docs/VISION.md for the full architectural rationale.


Who Is This For?

Anyone who builds or maintains Altium component libraries and uses an MCP-capable AI assistant. The AI does the engineering (datasheet → dimensions → style); this server lets it read and write the actual .PcbLib / .SchLib files.

If you…

Then…

Use Claude Code, Claude Desktop, or VSCode + Copilot and design in Altium

✅ This is for you

Want pre-baked generators for a fixed set of packages

❌ Not this — the point is any component

Don't use Altium

❌ Not applicable


Quick Start with Claude Code

Claude Code Setup Guide — Complete step-by-step instructions for using this MCP server with Claude Code CLI on Windows, Linux, and macOS.


Quick Start with Google Antigravity

Google Antigravity Setup Guide — Step-by-step instructions for using this MCP server with Google Antigravity (IDE and CLI) on Windows, Linux, and macOS.


How It Works

┌─────────────────────────────────────────────────────────────────────────────┐
│  AI-ASSISTED COMPONENT CREATION                                             │
│                                                                             │
│  Engineer                    AI                         MCP Server          │
│    │                         │                              │               │
│    │  "Create 0603 resistor" │                              │               │
│    ├────────────────────────►│                              │               │
│    │                         │                              │               │
│    │                         │  AI reasons about:           │               │
│    │                         │  • IPC-7351B pad sizes       │               │
│    │                         │  • Courtyard margins         │               │
│    │                         │  • Silkscreen/symbol style   │               │
│    │                         │                              │               │
│    │                         │  write_pcblib(primitives)    │               │
│    │                         ├─────────────────────────────►│               │
│    │                         │                              │ Writes        │
│    │                         │                              │ .PcbLib +     │
│    │                         │  write_schlib(symbol)        │ .SchLib files │
│    │                         ├─────────────────────────────►│               │
│    │                         │◄─────────────────────────────┤               │
│    │                         │  { success: true }           │               │
│    │                         │                              │               │
│    │  "Done! Footprint       │                              │               │
│    │   and symbol created"   │                              │               │
│    │◄────────────────────────┤                              │               │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

MCP Tools

The server exposes 33 tools, working on both .PcbLib (footprints) and .SchLib (symbols). Every tool's full parameters and examples live in docs/TOOLS.md — this is the categorised overview.

Read & write

Tool

Purpose

read_pcblib

Read footprints from a .PcbLib.

write_pcblib

Write footprints to a .PcbLib.

read_schlib

Read symbols from a .SchLib.

write_schlib

Write symbols to a .SchLib.

Inspect & visualise

Tool

Purpose

list_components

List component names (paginated).

get_component

Get one component's full data.

search_components

Search across libraries by regex/glob.

component_exists

Check whether components exist.

render_footprint

ASCII-art preview of a footprint.

render_symbol

ASCII-art preview of a symbol.

extract_style

Extract styling from an existing library.

Compare

Tool

Purpose

diff_libraries

Compare two library files.

compare_components

Diff two specific components.

Edit in place

Tool

Purpose

update_component

Update a component, preserving its position.

update_pad

Update one pad's properties.

update_primitive

Update one primitive (track/arc/text/fill/region).

batch_update

Batch updates across all components.

reorder_components

Reorder components in a library.

manage_schlib_parameters

List/get/set/remove SchLib parameters.

manage_schlib_footprints

Manage footprint links in SchLib symbols.

Manage components

Tool

Purpose

delete_component

Delete one or more components.

copy_component

Duplicate a component within a library.

rename_component

Rename a component (atomic).

copy_component_cross_library

Copy a component to another library.

bulk_rename

Pattern-based multi-rename.

Library operations

Tool

Purpose

merge_libraries

Merge multiple libraries into one.

export_library

Export to JSON/CSV.

import_library

Import from JSON (inverse of export).

validate_library

Validate for common issues.

repair_library

Remove orphaned data.

extract_step_model

Extract embedded STEP 3D models.

Backups & safety

Tool

Purpose

list_backups

List automatic backups.

restore_backup

Restore from a backup.

Primitive Types

Footprint Primitives (PcbLib)

Primitive

Description

Pad

SMD or through-hole pad with designator, position, size, shape, layer (see Pad Shapes below)

Via

Vertical interconnect with layer span, hole size, and thermal relief

Track

Line segment on any layer (silkscreen, assembly, etc.)

Arc

Arc or circle on any layer

Region

Filled polygon (courtyard, copper pour)

Text

Text string with font, size, position, layer

Fill

Filled rectangle on any layer

ComponentBody

3D model reference (embedded STEP models)

Pad Shapes and Pin 1 Indicator

The shape property on pads controls the copper shape. Use this to indicate pin 1:

Shape

Value

Usage

Rectangle

"rectangle"

Pin 1 indicator — use for the first pad to distinguish it visually

Rounded Rectangle

"rounded_rectangle"

Default for SMD pads (most common)

Round

"round" or "circle"

Circular pads, default for through-hole (both values are equivalent)

Oval

"oval"

Oblong pads for constrained spaces

Example — marking pin 1 with a rectangular pad:

{
    "pads": [
        { "designator": "1", "x": -0.75, "y": 0, "width": 0.9, "height": 0.95, "shape": "rectangle" },
        { "designator": "2", "x": 0.75, "y": 0, "width": 0.9, "height": 0.95, "shape": "rounded_rectangle" }
    ]
}

This follows the IPC-7351 convention where pin 1 has a distinct shape (typically rectangular or square corners) while other pads use rounded corners.

Symbol Primitives (SchLib)

Primitive

Description

Pin

Component pin with name, designator, electrical type, orientation

Rectangle

Filled or unfilled rectangle (component body)

RoundRect

Rounded rectangle with corner radii

Line

Single line segment

Polyline

Multiple connected line segments

Polygon

Filled polygon with border and fill colours

Arc

Arc or circle

Ellipse

Ellipse or circle (filled or unfilled)

EllipticalArc

Elliptical arc segment with fractional radii

Bezier

Cubic Bezier curve (4 control points)

Label

Text label (RECORD=4)

Text

Text annotation (RECORD=3)

Parameter

Component parameter (Value, Part Number, etc.)

FootprintModel

Reference to a footprint in a PcbLib

Standard Altium Layers

Common layers for footprints (each has a Bottom equivalent):

Layer

Usage

Top Layer

Copper pads (SMD)

Bottom Layer

Bottom copper pads

Multi-Layer

Through-hole pads (all copper layers)

Top Overlay

Silkscreen

Top Paste

Solder paste stencil

Top Solder

Solder mask openings

Top Assembly

Assembly outline (documentation)

Top Courtyard

Courtyard boundary (IPC-7351)

Top 3D Body

3D model outline

Additional layers supported:

Layer

Usage

Mid-Layer 1–30

Internal copper layers

Internal Plane 1–16

Power/ground planes

Mechanical 1–16

User-defined mechanical layers

Drill Guide

Drill hole markers

Drill Drawing

Drill chart/table

Keep-Out Layer

Routing exclusion zones


Installation

See CONTRIBUTING.md § Development Setup for build instructions.

The release binary will be at target/release/altium-designer-mcp.

Command-Line Usage

altium-designer-mcp [OPTIONS] [CONFIG_FILE]

Option

Description

CONFIG_FILE

Path to configuration file (optional, uses default location if omitted)

-v, --verbose

Increase logging verbosity (-v info, -vv debug, -vvv trace)

-q, --quiet

Decrease logging verbosity (only show errors)

-h, --help

Print help information

-V, --version

Print version information

Usage with Claude Desktop

Add to your Claude Desktop MCP configuration:

{
    "mcpServers": {
        "altium": {
            "command": "altium-designer-mcp",
            "args": ["/path/to/config.json"]
        }
    }
}

Configuration

Configuration file location:

  • Linux/macOS: ~/.altium-designer-mcp/config.json

  • Windows: %USERPROFILE%\.altium-designer-mcp\config.json

{
    "allowed_paths": [
        "/path/to/your/altium/libraries",
        "/another/library/path"
    ],
    "logging": {
        "level": "warn"
    }
}

Configuration Options

Option

Description

allowed_paths

Array of directory paths where library files can be accessed (default: current directory)

logging.level

Log level: trace, debug, info, warn, error (default: warn)


STEP Model Integration

STEP models are attached, not generated. The tool links existing STEP files to footprints.

{
    "step_model": {
        "filepath": "./3d-models/0603.step",
        "x_offset": 0,
        "y_offset": 0,
        "z_offset": 0,
        "rotation": 0
    }
}

Embedded vs External Models

Altium supports two ways to reference 3D models:

Type

Storage

Portability

Embedded

STEP data stored inside the .PcbLib file

Fully portable — the model travels with the library

External

File path reference to a .step file on disk

Not portable — requires the file to exist at the referenced path

When using copy_component_cross_library or merge_libraries:

  • Embedded models are copied along with the component

  • External model references are removed with a warning, as the file paths are not portable across different machines or directory structures

To preserve 3D models when copying components, ensure they are embedded in the source library (not external references).

Extracting Embedded Models

Use extract_step_model to extract embedded STEP data from a library:

{
    "name": "extract_step_model",
    "arguments": {
        "filepath": "./MyLibrary.PcbLib",
        "output_path": "./extracted_model.step"
    }
}

For parametric 3D model generation, a dedicated mechanical MCP server is planned as a future project.


Automatic Backups

Before any destructive operation (delete, update, merge, batch update), the server automatically creates a timestamped backup of the target file. Backups use the format:

MyLibrary.PcbLib.20260125_143022.bak

Backup retention: Only the 5 most recent backups per file are kept. Older backups are automatically removed to prevent unbounded disk usage.

Operations that create backups:

  • delete_component

  • update_component

  • update_pad

  • update_primitive

  • rename_component

  • copy_component

  • copy_component_cross_library (target file)

  • merge_libraries (target file)

  • reorder_components

  • batch_update

  • bulk_rename

  • write_pcblib / write_schlib (when overwriting)

  • import_library (when overwriting)

Disabling backups: All write operations accept a create_backup parameter (default: true). Set to false to skip backup creation:

{
    "name": "delete_component",
    "arguments": {
        "filepath": "./MyLibrary.PcbLib",
        "component_names": ["OLD_COMPONENT"],
        "create_backup": false
    }
}

Managing backups: Use list_backups to view available backups and restore_backup to recover from a previous version.

Dry-run support: Most destructive operations support dry_run=true to preview changes without modifying files:

  • delete_component — preview which components would be deleted

  • update_component — preview component replacement changes

  • update_pad / update_primitive — preview property changes

  • bulk_rename — preview name changes

  • repair_library — preview orphaned references to remove

  • copy_component / rename_component / reorder_components

  • write_pcblib / write_schlib / import_library

  • copy_component_cross_library / merge_libraries


Notes

Long Component Names

Component names longer than 31 characters are supported. The OLE Compound File format limits storage names to 31 characters, so longer names are automatically truncated internally while the full name is preserved in component parameters. This is handled transparently — you can use any length component name and it will be preserved on read/write roundtrips.


Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.


Development

Running Tests

cargo test

Tests are self-contained and generate their own data programmatically. Temporary files are created in .tmp/ (git-ignored) and automatically cleaned up.

Code Quality

cargo fmt --check  # Check formatting
cargo clippy       # Lint

Licence

Copyright (C) 2026 The Embedded Society https://github.com/embedded-society/altium-designer-mcp.

GNU General Public License v3.0 — see LICENCE.



Sample Files

Sample Altium library files are included in the scripts/ folder for manual debugging only. Automated tests do not depend on these files.

See scripts/README.md for details on available sample files and analysis scripts.


Prior Art & Acknowledgements

This project stands on the shoulders of several excellent open-source efforts, and we're grateful for each:

  • AltiumSharp (MIT) — the most complete open Altium reader/writer. Used as the authoritative reference (its DTOs, binary serializers, and golden TestData) for verifying our binary format against ground truth.

  • pyAltiumLib — an independent Python reader, used as our CI readability oracle (tests/integration/) to check that generated files actually parse.

  • python-altium — early Altium format documentation.

  • coffeenmusic/altium-mcp (MIT) — an MCP server that drives the live Altium application. It's the complement to this project (we generate and edit library files offline; it controls a running session). We adapted its RunScript launch + file-based bridge pattern for our on-site Altium automation (scripts/altium/).

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
6hResponse time
Release cycle
Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/embedded-society/altium-designer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server