
Altium
STDIOClaude-controlled Altium Designer interface for PCB design manipulation and querying
Claude-controlled Altium Designer interface for PCB design manipulation and querying
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.
C:\AltiumMCP\symbol_placement_rules.txt
description as pin placement rules. Please modify for your own preferences.)Currently only tested on Windows & the Altium scripts have hard coded C:\AltiumMCP
paths for now. That's probably a good TODO item.
C:\
so you end up with a C:\AltiumMCP\
directoryOn Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
and then
set Path=C:\Users\nntra\.local\bin;%Path%
C:\AltiumMCP\
directory and run uv sync
to add packages from pyproject.toml file.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" ] } } }
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.
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\
.
The server provides several tools to interact with Altium Designer:
get_output_job_containers
: Using currently open .OutJob file, reads all available output containersrun_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.get_all_designators
: Get a list of all component designators in the current boardget_all_component_property_names
: Get a list of all available component property namesget_component_property_values
: Get the values of a specific property for all componentsget_component_data
: Get detailed data for specific components by designatorget_component_pins
: Get pin information for specified componentsget_schematic_data
: Get schematic data for specified componentscreate_schematic_symbol
(YouTube): Passes pin list with pin type & coordinates to Altium scriptget_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 symbolget_all_nets
: Returns a list of unique nets from the pcbcreate_net_class
(YouTube): Create a net class from a list of netsget_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 componentsmove_components
: Move specified components by X and Y offsetslayout_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.
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.get_server_status
: Check the status of the MCP server, including paths to Altium and script filesThe server communicates with Altium Designer using a scripting bridge:
C:\AltiumMCP\request.json
Altium_API.PrjScr
scriptC:\AltiumMCP\response.json
This is a third-party integration and not made by Altium. Made by coffeenmusic
scripts-libraries\Scripts - PCB\FilterObjects\
scripts-libraries\Scripts - SCH\SelectionFilter\
DXP/ReportPCBViews.pas
PCB/CreateRules.pas
TODO Tests: Need to add the following test units
get_pcb_layers
set_pcb_layer_visibility
layout_duplicator
get_pcb_screenshot