Altium MCP服务器
TLDR:使用Claude来控制或询问有关Altium项目的问题。 这是一个模型上下文协议(MCP)服务器,它提供了一个通过Python与Altium Designer交互的接口。该服务器允许以编程方式查询和操纵PCB设计。
新:分销商整合 检查组件可用性,获得实时定价,找到替代方案,并使用Nexar API集成验证您的BOM。 安装指南 | 特性 | 工作流
第五阶段新增: 电路板初始化和布线工具!设置电路板尺寸,添加轮廓和安装孔,布线迹线,放置通孔,并创建铜浇注。请参阅下面的电路板和布线工具部分。
第四阶段新增: 组件放置已完全重新设计,现在工作可靠!请参阅下面的组件操作部分。
第二阶段新增: 项目管理和图书馆搜索工具!创建项目,跨库搜索组件,并管理您的工作流程。请参阅下面的项目和库管理部分。
示例命令
- 分销商整合: “检查我的BOM的组件可用性”|“查找U3的替代品”|“100个单位的价格是多少?”
- 运行所有输出作业
- 在附加的数据表中为零件创建符号,并将当前打开的符号用作参考示例。
- 根据随附的MPM3650开关稳压器数据表创建原理图符号,并确保严格遵守符号放置规则。(注意:需要打开原理图库。用途
C:\AltiumMCP\symbol_placement_rules.txt描述为引脚放置规则。请根据自己的喜好进行修改。) - 复制我选择的布局。(将提示用户现在选择目标组件。支持组件、轨迹、圆弧、通路、多边形和区域)
- 展示我所有的内心世界。显示顶层和底层。关闭焊膏。
- 把Molex设计的所有零件都给我
- 给我U4的描述和零件号
- 根据开关稳压器的最佳实践,将选定的零件放在我的pcb上。注意:它尝试了,但位置很糟糕。希望我能找到一种方法来改善这一点。
- 给我一份我设计中所有IC代号的清单
- 给我所有长度匹配规则
安装MCP服务器
- 确保Claude安装了Python 3.11:
drop down > File > Settings > Extensions > Advanced > Python: 3.11.0如果没有,请安装3.11并将python添加到PATH中。 - 下载
altium-mcp.dxt来自的桌面扩展文件 发布 - 在Windows上的克劳德桌面中:
drop down > File > Settings > Extensions > Advanced > Install Extension...选择.dxt文件
您不需要重新启动Claude,现在您应该在搜索栏附近的工具菜单中看到altium mcp。
创建新的.dxt(面向开发人员)
pip服务器/lib(推荐)
- 在中填充包
server/lib目录:从根目录>python -m pip install --no-cache-dir --target server/lib -r requirements.txt - 更新清单
server/lib并包括添加的任何新工具、修改等。
"server": {
"type": "python",
"entry_point": "server/main.py",
"mcp_config": {
"command": "python",
"args": ["${__dirname}/server/main.py"],
"env": {
"PYTHONPATH": "${__dirname}/server/lib"
}
}
}- 下载Node.js,安装Anthropic的DXT工具:
npm install -g @anthropic-ai/dxt,软件包dxt:dxt pack
uv服务器/VNV(不推荐)
在Windows上
1.
powershell -c "irm https://astral.sh/uv/install.ps1 | iex" 然后
set Path=C:\Users\nntra\.local\bin;%Path%- 创建DXT期望的venv目录:从根目录运行
uv venv server/venv --relocatable - 将依赖项安装到venv:
uv pip install --python server/venv/Scripts/python.exe -r requirements.txt - 更新清单
server/venv并包括添加的任何新工具、修改等。
"server": {
"type": "python",
"entry_point": "server/main.py",
"mcp_config": {
"command": "${__dirname}/server/venv/Scripts/python.exe",
"args": ["${__dirname}/server/main.py"],
"env": {
"PYTHONPATH": "${__dirname}/server/venv"
}
}
}- 下载Node.js,安装Anthropic的DXT工具:
npm install -g @anthropic-ai/dxt,软件包dxt:dxt pack
DXT资源
配置
首次启动claude时,服务器将自动尝试定位您的Altium Designer安装。它将搜索以开头的所有目录 C:\Program Files\Altium\AD* 并使用修订号最大的版本。如果找不到任何可执行文件,则在首次运行服务器时,系统将提示您手动选择Altium可执行文件(X2.EXE)。Altium的DelphiScript脚本用于在mcp服务器和Altium之间创建API。
可用工具
服务器提供了几个与Altium Designer交互的工具:
经销商集成(新增!)
Nexar API提供实时组件可用性、定价和BOM验证。
快速入门: API设置指南 -在5分钟内获得您的免费Nexar API密钥!
可用工具:
check_component_availability:检查多个分销商的库存水平get_component_pricing:获取包含数量折扣的当前定价find_component_alternatives:查找不可用零件的直接替换件validate_bom:生产准备就绪的全面BOM验证search_distributor_parts:按规格搜索组件
示例用法:
"Check availability for all components in my BOM"
"What's the price for 100 units of manufacturer part LM358N?"
"Component U5 is out of stock. Find me alternatives."
"Validate my BOM for a production run of 50 boards"
"Find 0805 10k resistors with 1% tolerance in stock"主要特点:
- Digi-Key、Mouser、Newark、Arrow等公司的实时库存水平
- 用于成本优化的数量突破定价
- 智能替代零件建议
- 生命周期和淘汰警告
- 生产计划的交付周期跟踪
了解更多:
输出作业
get_output_job_containers:使用当前打开的。OutJob文件,读取所有可用的输出容器run_output_jobs:传递当前打开的输出作业容器名称列表。OutJob可以运行任意数量的任务。.OutJob必须是当前关注的文档。
组件信息
get_all_designators:获取当前电路板中所有组件标识符的列表get_all_component_property_names:获取所有可用组件属性名称的列表get_component_property_values:获取所有组件的特定属性值get_component_data:按指示符获取特定组件的详细数据get_component_pins:获取指定组件的引脚信息
组件操作(第4阶段-新增!)
通过适当的封装库集成增强了组件放置和操作工具:
place_component:在PCB上放置一个具有指定封装和位置的单个组件
- 自动搜索所有加载的库以查找封装 - 支持层选择(顶部/底部)、旋转和精确定位(单位:mm) - 例子: place_component("R1", "0805", 10.0, 20.0, 0, 90)
place_component_array:将多个组件放置在具有自动指示符编号的网格图案中
- 非常适合放置电阻器或电容器阵列 - X和Y方向上可配置的行、列和间距 - 示例:放置一个由0805个电阻器组成的2x3网格,间距为5mm
align_components:将多个组件对齐到一个公共边缘(左/右/上/下)
- 选择与逗号分隔的指示符对齐的组件 - 可用于将组件组织成整齐的行或列 - 例子: align_components("R1,R2,R3", "left")
delete_component:按代号从PCB上拆下组件
- 通过适当的PCB更新进行清洁拆卸 - 例子: delete_component("R1")
已修复内容:
- 元件放置现在可以正确搜索封装库,而不是失败
- 封装图元(焊盘、轨迹、丝网印刷)已正确复制到组件中
- 组件已在PCB板上正确注册,以实现完整功能
- 所有操作都使用PCBServer预处理/后处理进行原子更新
工作流程示例:
1. "Place an 0805 resistor at position 50,50mm with 90 degree rotation"
2. "Create a 4x4 array of 0603 capacitors starting at 10,10mm with 5mm spacing"
3. "Align all the components R1, R2, R3, R4 to the left edge"
4. "Delete the test component R_TEST"电路板和布线工具(第5阶段-新增!)
板初始化和手动路由功能:
电路板初始化工具
set_board_size:设置PCB板的尺寸
- 以毫米为单位指定宽度和高度 - 例子: set_board_size(100, 80) 对于100mm x 80mm的板
add_board_outline:在PCB上添加矩形板轮廓
- 定义轮廓位置(x,y)和尺寸(宽度、高度),单位为毫米 - 在宽度为0.2mm的KeepOut图层上创建轮廓 - 例子: add_board_outline(0, 0, 100, 80) 原始板轮廓
add_mounting_hole:在PCB上添加安装孔
- 指定位置(x,y)、孔径和可选焊盘直径(单位:mm) - 为机械安装创建镀通孔垫 - 如果未指定,垫片直径默认为2倍孔径 - 例子: add_mounting_hole(10, 10, 3.2, 6.4) M3安装孔
add_board_text:向PCB添加文本
- 将文本放置在具有可配置大小和图层的指定坐标处 - 支持图层:TopOverlay、BottomOverlay、TopSilkScreen等。 - 例子: add_board_text("REV 1.0", 50, 5, "TopOverlay", 1.5)
路由工具
route_trace:在指定图层上的两点之间绘制轨迹
- 定义起点(x1,y1)、终点(x2,y2)、图层和宽度(单位:mm) - 可选的网络分配,以实现正确的电气连接 - 例子: route_trace(10, 10, 50, 50, "TopLayer", 0.25, "GND")
add_via:在指定坐标处放置过孔
- 指定位置(x,y)、过孔直径、孔尺寸和层跨度(单位:mm) - 在start_layer和end_layer之间连接(默认值:TopLayer到BottomLayer) - 电气连接的可选网络分配 - 例子: add_via(25, 25, 0.6, 0.3, "TopLayer", "BottomLayer", "VCC")
add_copper_pour:创建铜浇注(填充多边形区域)
- 定义具有位置、尺寸、图层和网格的矩形区域 - 通常用于地面或动力飞机 - 使用pour_over_same_net选项控制浇注行为 - 例子: add_copper_pour(0, 0, 100, 80, "BottomLayer", "GND", True)
工作流程示例:
1. "Set the board size to 100mm x 80mm"
2. "Add a board outline at origin with dimensions 100mm x 80mm"
3. "Add mounting holes at each corner (M3 size, 3.2mm hole, 6.4mm pad)"
4. "Add revision text 'REV 1.0' on the top overlay at 50,5mm"
5. "Route a 0.25mm trace from pin A to pin B on the top layer"
6. "Add a via at 25,25mm to connect top to bottom layer"
7. "Create a GND copper pour on the bottom layer covering the entire board"项目和图书馆管理(第2阶段-新增!)
项目生命周期管理和库搜索功能:
项目管理工具
create_project:使用PCB和原理图文件创建新的Altium项目
- 指定项目名称、路径和可选模板(空白、arduino、raspberry_pi) - 使用空白PCB和原理图自动创建项目结构 - 例子: create_project("MyBoard", "C:\\Projects\\MyBoard", "blank")
save_project:保存当前打开的项目及其所有文档
- 保存所有PCB、原理图和其他项目文档 - 示例:“保存我当前的项目”
get_project_info:获取当前打开项目的详细信息
- 返回项目名称、路径、文件计数和文档类型细分 - 显示PCB计数、原理图计数和其他文档计数 - 示例:“我当前的项目中有哪些文件?”
close_project:关闭当前打开的项目
- 彻底关闭项目和所有相关文档 - 示例:“关闭此项目”
库搜索工具
list_component_libraries:列出所有加载的组件和PCB库
- 显示库名称、路径和类型(原理图、PCB或集成) - 示例:“我加载了哪些库?”
search_components:在所有加载的库中搜索组件
- 搜索组件名称和描述 - 返回组件名称、描述、库和封装信息 - 例子: search_components("LM358") 或“查找所有运算放大器组件”
get_component_from_library:获取特定组件的详细信息
- 检索组件详细信息,包括引脚数和其他参数 - 例子: get_component_from_library("OpAmps.SchLib", "LM358")
search_footprints:在所有加载的PCB库中搜索封装
- 搜索足迹名称 - 返回封装名称、库和焊盘计数 - 例子: search_footprints("0805") 或“查找所有SOT-23足迹”
示例工作流:
1. "Create a new project called PowerSupply in C:\\Projects"
2. "Search for components containing '555 timer' in the loaded libraries"
3. "What libraries are currently loaded?"
4. "Find all 0603 footprints available"
5. "Get details for component LM358 from the OpAmps library"优点:
- 无需手动浏览库即可快速发现可用组件
- 以编程方式理解项目结构和内容
- 自动化项目创建和管理任务
- 同时在多个库中搜索
设计分析与智能(第3阶段-新增!)
用于跟踪设计质量和识别电路模式的先进设计分析工具:
DRC历史跟踪
随着时间的推移跟踪设计规则检查(DRC)结果,以监控设计质量和改进趋势:
run_drc_with_history:运行DRC并自动将结果保存到历史数据库
- 按严重程度(严重、警告、信息)存储违规计数 - 记录违规类型及其频率 - 生成与以前运行相比的进度报告 - 数据库存储在 ~/.altium-mcp/drc_history.db - 示例:“运行DRC并跟踪结果”
get_drc_history:查看项目的历史DRC结果
- 显示随时间变化的趋势(改善、下降、稳定) - 显示最近运行的违规计数 - 提供运行之间的进度比较 - 示例:“显示此项目的DRC历史记录”
get_drc_run_details:获取特定DRC运行的详细信息
- 历史运行的完整违规数据 - 违规类型细分 - 例子: get_drc_run_details(run_id=5)
DRC跟踪优势:
- 监控设计质量随时间的改进
- 识别违规模式的趋势
- 跟踪实现零违规目标的进展
- 设计评审历史记录
电路模式识别
自动识别PCB设计中的常见电路模式:
identify_circuit_patterns:分析设计以找到常见的电路拓扑
- 检测到电源: - 降压/升压DC-DC转换器(开关稳压器) - 线性稳压器(LM78xx、LM79xx、AMS117等) - 低压差稳压器(LDO) - 检测到的接口电路: - USB接口(USB-C、USB 2.0、USB 3.0) - 以太网接口(RJ45、磁性) - SPI接口(MOSI、MISO、SCLK信号) - I2C接口(SDA、SCL信号) - 检测到的滤波器电路: - RC低通滤波器 - LC滤波器 - 返回每个检测到的模式的置信度得分 - 示例:“我的设计中有哪些电路模式?”
模式识别的好处:
- 快速了解设计拓扑和架构
- 验证预期电路是否存在
- 识别缺失的解耦或过滤
- 自动文档设计部分
示例工作流:
1. "Analyze my design and tell me what circuit patterns you find"
→ Identifies 2 linear regulators, 1 USB interface, 3 RC filters
2. "Run DRC and track the results in history"
→ Saves results, shows trend: "improving" (20 → 15 violations)
3. "Show me the DRC history for the last 5 runs"
→ Displays historical trend with violation breakdowns
4. "What power supply circuits are in my design?"
→ Pattern recognition finds buck converter and LDO regulator模式识别输出示例:
{
"patterns": {
"power_supplies": [
{
"type": "linear_regulator",
"confidence": 0.9,
"components": ["U1", "C1", "C2"],
"description": "Linear regulator: LM7805"
}
],
"interfaces": [
{
"type": "usb_interface",
"confidence": 0.9,
"nets": ["USB_D+", "USB_D-", "USB_VBUS"],
"components": ["J1"],
"description": "USB interface detected"
}
]
},
"summary": "Found: 1 power supply circuit(s), 1 interface circuit(s)"
}示意图/符号
get_schematic_data:获取指定组件的原理图数据create_schematic_symbol(油管):将带有引脚类型和坐标的引脚列表传递给Altium脚本get_symbol_placement_rules:创建符号的辅助工具,该工具读取C:\AltiumMCP\symbol_placement_rules.txt获取符号创建的引脚放置规则。get_library_symbol_reference:创建符号的辅助工具,以开放库符号为例创建符号
布局操作
get_all_nets:从pcb返回唯一网络列表create_net_class(油管):从网络列表中创建一个网络类get_pcb_layers:获取详细的图层信息,包括电气、机械、图层对等。get_pcb_layer_stackup:获取堆叠信息,如电介质、层厚度等。set_pcb_layer_visibility(油管):打开或关闭任何一组图层。例如,启用内层。关掉丝绸。get_pcb_rules:获取布局中所有pcb规则的规则描述。get_selected_components_coordinates:获取当前选定组件的位置和旋转信息move_components:按X和Y偏移移动指定组件layout_duplicator(油管):假设您已经选择了PCB上的源组件,则开始布局复制。layout_duplicator_apply:行动#2layout_duplicator.Agent将自动使用部件信息来预测源组件和目标组件之间的匹配,然后将这些匹配发送到位置脚本。
与Altium的内置布局复制不同,这种布局复制的酷之处在于,不必匹配确切的组件,因为LLM可以查看描述并了解哪些组件匹配,哪些组件不匹配。这真的不能硬编码。 Placement Duplicator
两者
get_screenshot:截取当前视图的Altium PCB窗口或原理图窗口的屏幕截图。如果它是打开的,但聚焦了不同的文档类型,它应该自动聚焦其中任何一个。注意:克劳德不太擅长分析电路或布局截图等图像。ChatGPT非常擅长它,但他们还没有发布MCP,所以这个功能在未来会更有用。
服务器状态
get_server_status:检查MCP服务器的状态,包括Altium和脚本文件的路径
运作原理
服务器使用脚本桥与Altium Designer通信:
- 它将命令请求写入
workspace\request.json - 它启动Altium,并指示运行
Altium_API.PrjScr脚本 - 脚本处理请求并将结果写入
workspace\response.json - 服务器读取并返回响应
参考文献
- 从Jeff Collins和William Kitchen的精简版中获取脚本的项目路径
- BlenderMCP:听说MCP在Blender中使用,我受到了启发,并将其作为参考。https://github.com/ahujasid/blender-mcp
- 使用Petar Perisin和Randy Clemmons的CopyDesignatorsToMechLayerPair脚本作为参考。复制对象(用于布局复制器)
- Petar Perisin的Select Bad Connections脚本:用于理解如何行走连接到焊盘的pcb图元(轨道、弧形、过孔等)
- Matija Markovic和Petar Perisin分发脚本:了解如何正确地让GUI知道我何时更新了曲目网络
- 来自Poly的Petar Perisin的房间:用作检测Poly与焊盘重叠的参考,因为我无法找到更传统的方法来工作。
- Petar Perisin的图层面板脚本:用作获取图层和更改图层可见性的参考
- Jeff Collins有一个XIA_Release_Manager.pas脚本,它教会了我输出作业的艺术。请参阅他在Altium论坛上的帖子:https://forum.live.altium.com/#/posts/189423
免责声明
这是第三方集成,不是Altium制造的。由...制作 咖啡音乐
一切:
- 更改选择筛选器:
- scripts-libraries\Scripts - PCB\FilterObjects\ - scripts-libraries\Scripts - SCH\SelectionFilter\
- 显示/隐藏面板:
DXP/ReportPCBViews.pas - 创建规则:
PCB/CreateRules.pas - 运行DRC:IPCB_Board。RunBatchDesignRuleCheck(
- 将光标移动到位置:IPCB_Board。XCursor,IPCB_Board。YCursor
- 为封装添加get原理图和pcb库路径。
- 从库中添加get符号
- 记录每个工具的响应时间
- 添加到原理图页
- 转到带有组件指示符的表
- 董事会。选择位置(x,y,“测试”);
- 缩放到选定对象:
- 更改原理图选择过滤器:SelectionFilter.pas
- 放置原理图对象(从库中放置元件):PlaceSchObjects.pas
- 如何从“组件”面板中的库中读取组件?
TODO测试: 需要添加以下测试单元
get_pcb_layersset_pcb_layer_visibilitylayout_duplicatorget_pcb_screenshot
