Fire in da houseTop Tip:Paying $100+ per month for Perplexity, MidJourney, Runway, ChatGPT is crazy - get all your AI tools in one site starting at $15 per month with Galaxy AIFire in da houseCheck it out free

altium-mcp

MCP.Pizza Chef: coffeenmusic

The Altium MCP server provides a Python-based interface to interact with Altium Designer projects. It enables programmatic querying and manipulation of PCB designs, allowing users to automate tasks such as running output jobs, creating schematic symbols from datasheets, duplicating layouts, and more. This server integrates with LLMs like Claude to facilitate natural language control over complex PCB design workflows.

Use This MCP server To

Automate running all output jobs in Altium projects Generate schematic symbols from datasheets programmatically Duplicate selected PCB layouts with component selection Query design data and component details via natural language Enforce custom symbol placement rules during schematic creation Manipulate PCB design elements like tracks, arcs, and polygons Integrate Altium design control into AI-driven workflows

README

Altium MCP Server

TLDR: Use Claude to control or ask questions about your Altium project. This is a Model Context Protocol (MCP) server that provides an interface to interact with Altium Designer through Python. The server allows for querying and manipulation of PCB designs programmatically.

Note: Having Claude place components on the PCB currently fails hard.

Example commands

  • Run all output jobs
  • Create a symbol for the part in the attached datasheet and use the currently open symbol as a reference example.
  • Create a schematic symbol from the attached MPM3650 switching regulator datasheet and make sure to strictly follow the symbol placement rules. (Note: Need to open a schematic library. Uses C:\AltiumMCP\symbol_placement_rules.txt description as pin placement rules. Please modify for your own preferences.)
  • Duplicate my selected layout. (Will prompt user to now select destination components. Supports Component, Track, Arc, Via, Polygon, & Region)
  • Show all my inner layers. Show the top and bottom layer. Turn off solder paste.
  • Get me all parts on my design made by Molex
  • Give me the description and part number of U4
  • Place the selected parts on my pcb with best practices for a switching regulator. Note: It tries, but does terrible placement. Hopefully I can find a way to improve this.
  • Give me a list of all IC designators in my design
  • Get me all length matching rules

Setup

Currently only tested on Windows & the Altium scripts have hard coded C:\AltiumMCP paths for now. That's probably a good TODO item.

  1. Clone the repo to C:\ so you end up with a C:\AltiumMCP\ directory
  2. Install uv

On Windows

powershell -c "irm https://astral.sh/uv/install.ps1 | iex" 

and then

set Path=C:\Users\nntra\.local\bin;%Path%
  1. Open cmd in C:\AltiumMCP\ directory and run uv sync to add packages from pyproject.toml file.

Claude for Desktop Integration

Enable Developer Mode under Claude > Help > Enable Developer Mode

Go to Claude > Settings > Developer > Edit Config > claude_desktop_config.json to include the following: Below is specific to Windows, TODO: find out how to run on both without a hard coded path

{
    "mcpServers": {
        "altium": {
            "command": "uv",
            "args": [
                "--directory",
                "C:\\AltiumMCP",
                "run",
                "server.py"
            ]
        }
    }
}

Using with Claude

Restart Claude: Right click on the Claude icon in the System Tray > Quit. Then re-open Claude desktop.

Once the config file has been set on Claude, and the addon is running on Altium, you will see a hammer icon with tools for the Altium MCP.

AltiumMCP in the sidebar

Configuration

When launching claude for the first time, the server will automatically try to locate your Altium Designer installation. It will search for all directories that start with C:\Program Files\Altium\AD* and use the one with the largest revision number. If it cannot find any, you will be prompted to select the Altium executable (X2.EXE) manually when you first run the server. Altium's DelphiScript scripting is used to create an API between the mcp server and Altium. It expects to find this script project in C:\AltiumMCP\AltiumScript\.

Available Tools

The server provides several tools to interact with Altium Designer:

Output Jobs

  • get_output_job_containers: Using currently open .OutJob file, reads all available output containers
  • run_output_jobs: Pass a list of output job container names from the currently open .OutJob to run any number of them. .OutJob must be the currently focused document.

Component Information

  • get_all_designators: Get a list of all component designators in the current board
  • get_all_component_property_names: Get a list of all available component property names
  • get_component_property_values: Get the values of a specific property for all components
  • get_component_data: Get detailed data for specific components by designator
  • get_component_pins: Get pin information for specified components

Schematic/Symbol

  • get_schematic_data: Get schematic data for specified components
  • create_schematic_symbol (YouTube): Passes pin list with pin type & coordinates to Altium script
  • get_symbol_placement_rules: Create symbol's helper tool that reads C:\AltiumMCP\symbol_placement_rules.txt to get pin placement rules for symbol creation.
  • get_library_symbol_reference: Create symbol's helper tool to use an open library symbol as an example to create the symbol

Symbol Creator

Layout Operations

  • get_all_nets: Returns a list of unique nets from the pcb
  • create_net_class (YouTube): Create a net class from a list of nets
  • get_pcb_layers: Get detailed layer information including electrical, mechanical, layer pairs, etc.
  • get_pcb_layer_stackup: Gets stackup info like dielectric, layer thickness, etc.
  • set_pcb_layer_visibility (YouTube): Turn on or off any group of layers. For example turn on inner layers. Turn off silk.
  • get_pcb_rules: Gets the rule descriptions for all pcb rules in layout.
  • get_selected_components_coordinates: Get position and rotation information for currently selected components
  • move_components: Move specified components by X and Y offsets
  • layout_duplicator (YouTube): Starts layout duplication assuming you have already selected the source components on the PCB.
  • layout_duplicator_apply: Action #2 of layout_duplicator. Agent will use part info automatically to predict the match between source and destination components, then will send those matches to the place script.

The cool thing about layout duplication this way as opposed to with Altium's built in layout replication, is that the exact components don't have to match because the LLM can look through the descriptions and understand which components match and which don't have a match. That's something that can't really be hard coded. Placement Duplicator

Both

  • get_screenshot: Take a screenshot of the Altium PCB window or Schematic Window that is the current view. It should auto focus either of these if it is open but a different document type is focused. Note: Claude is not very good at analyzing images like circuits or layout screenshots. ChatGPT is very good at it, but they haven't released MCP yet, so this functionality will be more useful in the future.

Server Status

  • get_server_status: Check the status of the MCP server, including paths to Altium and script files

How It Works

The server communicates with Altium Designer using a scripting bridge:

  1. It writes command requests to C:\AltiumMCP\request.json
  2. It launches Altium with instructions to run the Altium_API.PrjScr script
  3. The script processes the request and writes results to C:\AltiumMCP\response.json
  4. The server reads and returns the response

References

  • BlenderMCP: I got inspired by hearing about MCP being used in Blender and used it as a reference. https://github.com/ahujasid/blender-mcp
  • Used CopyDesignatorsToMechLayerPair script by Petar Perisin and Randy Clemmons for reference on how to .Replicate objects (used in layout duplicator)
  • Petar Perisin's Select Bad Connections Script: For understanding how to walk pcb primitives (track, arc, via, etc) connected to a pad
  • Matija Markovic and Petar Perisin Distribute Script: For understanding how to properly let the GUI know when I've updated tracks' nets
  • Petar Perisin's Room from Poly: Used as reference to detect poly to pad overlap since I couldn't get more tradition methods to work.
  • Petar Perisin's Layer Panel Script: Used as reference for getting layers and changing layer visibility
  • Jeff Collins has an XIA_Release_Manager.pas script that taught me the art of the Output Job. See his post on the Altium Forums: https://forum.live.altium.com/#/posts/189423

Disclaimer

This is a third-party integration and not made by Altium. Made by coffeenmusic

TODO:

  • Change selection filter:
    • scripts-libraries\Scripts - PCB\FilterObjects\
    • scripts-libraries\Scripts - SCH\SelectionFilter\
  • Show/Hide Panels: DXP/ReportPCBViews.pas
  • Create rules: PCB/CreateRules.pas
  • Run DRC: IPCB_Board.RunBatchDesignRuleCheck(
  • Move cursor to position: IPCB_Board.XCursor, IPCB_Board.YCursor
  • Add get schematic & pcb library path for footprint.
  • Add get symbol from library
  • log response time of each tool
  • Add go to schematic sheet
  • Go to sheet with component designator
  • Board.ChooseLocation(x, y, 'Test');
  • Zoom to selected objects:
  • Change Schematic Selection Filter: SelectionFilter.pas
  • Place schematic objects (place component from library): PlaceSchObjects.pas
  • How can I read through components from libraries in Components panel?

TODO Tests: Need to add the following test units

  • get_pcb_layers
  • set_pcb_layer_visibility
  • layout_duplicator
  • get_pcb_screenshot

altium-mcp FAQ

How do I connect the Altium MCP server to my Altium Designer?
The server uses a Python interface to communicate with Altium Designer, requiring Altium to be installed and accessible on your system.
Can I use this server with LLMs other than Claude?
Yes, the server is compatible with any MCP client that supports standard protocol communication, including models like OpenAI GPT and Anthropic Claude.
What types of PCB design elements can I manipulate?
You can manipulate components, tracks, arcs, vias, polygons, and regions within your PCB layout.
Are there any limitations I should be aware of?
Currently, having Claude place components on the PCB may fail; other functions like symbol creation and layout duplication work reliably.
How do I customize symbol placement rules?
You can modify the symbol placement rules by editing the text file (e.g., symbol_placement_rules.txt) used by the server for pin placement guidelines.
Is it possible to automate output job generation?
Yes, the server supports commands to run all output jobs automatically within your Altium project.
Does the server support schematic symbol creation from datasheets?
Yes, it can create schematic symbols from attached datasheets while following specified placement rules.
What programming knowledge is required to use this server?
Basic Python scripting knowledge is helpful to interact with the server and customize commands.