返回市场
Altium-MCP

Altium-MCP

作者:coffeenmusic29 星标更新:2025-08-03

项目介绍

Altium MCP Server

TLDR:使用Claude来控制或询问有关您的Altium项目的问题。 这是一个模型上下文协议(MCP)服务器,提供了一个通过Python与Altium Designer交互的接口。该服务器允许对PCB设计进行查询和编程操作。

注意:目前Claude在PCB上放置组件时会失败。

示例命令

  • 运行所有输出任务
  • 根据附加的数据表创建部件符号,并使用当前打开的符号作为参考示例。
  • 根据附加的MPM3650开关调节器数据表创建原理图符号,并确保严格遵循符号放置规则。(注意:需要打开一个原理图库。使用C:\AltiumMCP\symbol_placement_rules.txt描述作为引脚放置规则。请根据自己的喜好进行修改。)
  • 复制我选择的布局。(现在会提示用户选择目标组件。支持组件、走线、弧线、过孔、多边形及区域)
  • 显示我的所有内层。显示顶层和底层。关闭焊膏。
  • 获取我设计中由Molex制造的所有部件。
  • 给我U4的描述和部件编号。
  • 将选定的部件以最佳实践方式放置在我的PCB上。注意:它尝试了,但放置效果很差。希望我能找到改进的方法。
  • 给我一份我设计中的所有IC标识符列表。
  • 获取我设计中的所有长度匹配规则。

安装MCP服务器

观看YouTube教程

  1. 确保Claude安装了Python 3.11:下拉菜单 > 文件 > 设置 > 扩展 > 高级 > Python: 3.11.0。如果没有,请安装3.11并添加Python到PATH。
  2. 发布页面下载altium-mcp.dxt桌面扩展文件。
  3. 在Windows的Claude Desktop中:下拉菜单 > 文件 > 设置 > 扩展 > 高级 > 安装扩展... 选择.dxt文件。

您不需要重启Claude,现在应该可以在搜索栏附近的工具菜单中看到altium-mcp。

altium-mcp在工具菜单中

创建新的.dxt(对于开发者)

pip server/lib(推荐)

  1. 填充server/lib目录中的包:从根目录 > python -m pip install --no-cache-dir --target server/lib -r requirements.txt
  2. 更新server/lib的清单,并包含任何新增的工具,提升修订版本等。
"server": {
    "type": "python",
    "entry_point": "server/main.py",
    "mcp_config": {
      "command": "python",
      "args": ["${__dirname}/server/main.py"],
	  "env": {
		"PYTHONPATH": "${__dirname}/server/lib"
	  }
    }
  }
  1. 下载Node.js,安装Anthropic的DXT工具:npm install -g @anthropic-ai/dxt,打包dxt:dxt pack

uv server/venv(不推荐)

在Windows上 1.

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

然后

set Path=C:\Users\nntra\.local\bin;%Path%
  1. 在DXT期望的位置创建venv目录:从根目录运行uv venv server/venv --relocatable
  2. 将依赖项安装到venv:uv pip install --python server/venv/Scripts/python.exe -r requirements.txt
  3. 更新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"
	  }
    }
  }
  1. 下载Node.js,安装Anthropic的DXT工具:npm install -g @anthropic-ai/dxt,打包d xt:dxt pack

DXT资源

配置

首次启动claude时,服务器将自动尝试定位您的Altium Designer安装。它将在所有以C:\Program Files\Altium\AD*开头的目录中搜索,并使用修订号最大的那个。如果找不到任何安装,当您第一次运行服务器时,将被提示手动选择Altium可执行文件(X2.EXE)。使用Altium的DelphiScript脚本创建了MCP服务器与Altium之间的API。

可用工具

服务器提供了几个工具来与Altium Designer交互:

输出任务

  • 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:获取指定组件的引脚信息

原理图/符号

  • get_schematic_data:获取指定组件的原理图数据
  • create_schematic_symbolYouTube):将引脚列表及其类型和坐标传递给Altium脚本
  • get_symbol_placement_rules:创建符号辅助工具,读取C:\AltiumMCP\symbol_placement_rules.txt以获取符号创建的引脚放置规则。
  • get_library_symbol_reference:创建符号辅助工具,使用打开的库符号作为示例来创建符号

符号创建者

布局操作

  • get_all_nets:返回PCB上的唯一网络列表
  • create_net_classYouTube):从网络列表创建网络类
  • get_pcb_layers:获取详细的层信息,包括电气层、机械层、层对等
  • get_pcb_layer_stackup:获取堆叠信息,如介电材料、层厚度等
  • set_pcb_layer_visibilityYouTube):开启或关闭任何一组层。例如开启内层。关闭丝印层。
  • get_pcb_rules:获取布局中所有PCB规则的规则描述。
  • get_selected_components_coordinates:获取当前选中组件的位置和旋转信息
  • move_components:按X和Y偏移量移动指定组件
  • layout_duplicatorYouTube):假设您已经在PCB上选择了源组件,开始布局复制。
  • layout_duplicator_applylayout_duplicator的第2步。代理将自动使用部件信息预测源和目标组件之间的匹配,然后将这些匹配发送给放置脚本。

与Altium内置的布局复制相比,这种方式布局复制的一个很酷之处在于,确切的组件不必匹配,因为LLM可以通过查看描述来理解哪些组件匹配,哪些没有匹配。这是很难硬编码实现的。 放置复制器

共同

  • get_screenshot:拍摄Altium PCB窗口或原理图窗口的截图,这是当前视图。如果打开但聚焦于不同类型的文档,它应该自动聚焦于这些之一。注意:Claude在分析电路或布局截图这样的图像方面并不擅长。ChatGPT在这方面非常擅长,但他们还没有发布MCP,因此这种功能在未来会更有用。

服务器状态

  • get_server_status:检查MCP服务器的状态,包括Altium和脚本文件的路径

工作原理

服务器通过脚本桥接与Altium Designer通信:

  1. 它将命令请求写入workspace\request.json
  2. 它启动Altium并指示运行Altium_API.PrjScr脚本
  3. 脚本处理请求并将结果写入workspace\response.json
  4. 服务器读取并返回响应

参考资料

  • 从Jeff Collins和William Kitchen的简化版中获取脚本的项目路径
  • BlenderMCP:我受到关于MCP在Blender中使用的启发,并将其作为参考。https://github.com/ahujasid/blender-mcp
  • 使用Petar Perisin和Randy Clemmons的CopyDesignatorsToMechLayerPair脚本作为如何复制对象(用于布局复制器)的参考
  • Petar Perisin的Select Bad Connections Script:了解如何遍历PCB原始元素(走线、弧线、过孔等)连接到焊盘
  • Matija Markovic和Petar Perisin的Distribute Script:了解如何正确地让GUI知道我已经更新了走线的网络
  • Petar Perisin的Room from Poly:作为检测多边形到焊盘重叠的参考,因为我无法使更传统的方法工作。
  • Petar Perisin的Layer Panel Script:作为获取层和更改层可见性的参考
  • Jeff Collins有一个XIA_Release_Manager.pas脚本,教会了我输出作业的艺术。参见他在Altium论坛上的帖子:https://forum.live.altium.com/#/posts/189423

免责声明

这是一个第三方集成,不是由Altium制作的。由coffeenmusic制作

待办事项:

  • 更改选择过滤器:
    • 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
  • 添加获取原理图及PCB库路径的脚本。
  • 添加从库获取符号
  • 记录每个工具的响应时间
  • 添加转到原理图页
  • 转到带有组件标识符的页
  • Board.ChooseLocation(x, y, 'Test');
  • 放大选定的对象:
  • 更改原理图选择过滤器:SelectionFilter.pas
  • 放置原理图对象(从库放置组件):PlaceSchObjects.pas
  • 我如何从组件面板中的库读取组件?

待办测试: 需要添加以下测试单元

  • get_pcb_layers
  • set_pcb_layer_visibility
  • layout_duplicator
  • get_pcb_screenshot