altium-mcp

查看源码
2025-5-12
Words 1994Read Time 5 min
Score:85

Altium MCP服务器,通过Python接口与Altium Designer交互,实现PCB设计的程序化查询与操作。

Altium MCP Server

TLDR: 使用 Claude 控制或询问有关 Altium 项目的问题。 这是一个 Model Context Protocol (MCP) 服务器,提供了通过 Python 与 Altium Designer 交互的接口。该服务器允许以编程方式查询和操作 PCB 设计。
注意:目前,使用 Claude 在 PCB 上放置元件时会严重失败。

示例命令

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

安装

目前仅在 Windows 上测试过,且 Altium 脚本中硬编码了 C:\AltiumMCP 路径。这可能是需要改进的地方。
  1. 将仓库克隆到 C:\,最终得到 C:\AltiumMCP\ 目录
  1. 安装 uv
在 Windows 上
然后
  1. C:\AltiumMCP\ 目录中打开 cmd 并运行 uv sync,以从 pyproject.toml 文件中添加包。

Claude for Desktop 集成

在 Claude > 帮助 > 启用开发者模式下启用开发者模式。
转到 Claude > 设置 > 开发者 > 编辑配置 > claude_desktop_config.json,并包含以下内容: 以下内容特定于 Windows,TODO: 找到如何在两者上运行而不使用硬编码路径

使用 Claude

重启 Claude:右键点击系统托盘中的 Claude 图标 > 退出。然后重新打开 Claude 桌面。
一旦在 Claude 中设置了配置文件,并且插件在 Altium 中运行,您将看到一个带有 Altium MCP 工具的锤子图标。
!AltiumMCP 在侧边栏中

配置

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

可用工具

服务器提供了多种工具来与 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_symbol (YouTube): 将带有引脚类型和坐标的引脚列表传递给 Altium 脚本
  • get_symbol_placement_rules: 创建符号的辅助工具,读取 C:\AltiumMCP\symbol_placement_rules.txt 以获取符号创建的引脚放置规则。
  • get_library_symbol_reference: 创建符号的辅助工具,使用打开的库符号作为示例来创建符号
!符号创建器

布局操作

  • get_all_nets: 返回 PCB 中所有唯一网络的列表
  • create_net_class (YouTube): 从网络列表创建网络类
  • get_pcb_layers: 获取包括电气层、机械层、层对等的详细层信息
  • set_pcb_layer_visibility (YouTube): 打开或关闭任何层组。例如打开内层。关闭丝印层。
  • get_pcb_rules: 获取布局中所有 PCB 规则的规则描述。
  • get_selected_components_coordinates: 获取当前选中元件的位置和旋转信息
  • move_components: 通过 X 和 Y 偏移移动指定元件
  • layout_duplicator (YouTube): 假设您已经在 PCB 上选择了源元件,开始布局复制。
  • layout_duplicator_apply: layout_duplicator 的第二个操作。代理将自动使用元件信息来预测源和目标元件之间的匹配,然后将这些匹配发送到放置脚本。
这种布局复制方式与 Altium 内置的布局复制方式相比的酷之处在于,元件不必完全匹配,因为 LLM 可以通过描述来理解哪些元件匹配,哪些不匹配。这是无法硬编码的。 !布局复制器

两者

  • get_screenshot: 截取 Altium PCB 窗口或原理图窗口的当前视图的截图。如果打开了不同的文档类型,它会自动聚焦到其中任何一个。注意:Claude 不擅长分析电路或布局截图。ChatGPT 非常擅长,但他们尚未发布 MCP,因此此功能在未来将更有用。

服务器状态

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

工作原理

服务器通过脚本桥与 Altium Designer 通信:
  1. 它将命令请求写入 C:\AltiumMCP\request.json
  1. 它启动 Altium 并指示运行 Altium_API.PrjScr 脚本
  1. 脚本处理请求并将结果写入 C:\AltiumMCP\response.json
  1. 服务器读取并返回响应

参考

  • 使用 Petar Perisin 和 Randy Clemmons 的 CopyDesignatorsToMechLayerPair 脚本作为参考,了解如何 .Replicate 对象(用于布局复制器)
  • Petar Perisin 的 Select Bad Connections 脚本:用于理解如何遍历连接到焊盘的 PCB 原语(走线、圆弧、过孔等)
  • Matija Markovic 和 Petar Perisin 的 Distribute 脚本:用于理解如何正确通知 GUI 我已更新走线的网络
  • Petar Perisin 的 Room from Poly:作为检测多边形与焊盘重叠的参考,因为我无法使更传统的方法工作。
  • Petar Perisin 的 Layer Panel 脚本:作为获取层和更改层可见性的参考

免责声明

这是第三方集成,并非由 Altium 制作。由 coffeenmusic 制作

TODO:

  • 添加 OutJob 生成功能
  • 获取层堆栈:Scripts - Outputs/LayerStackExporter/
  • 创建一个单独的函数,带有一个 case 语句,决定聚焦哪个文档
  • 显示/隐藏面板: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
  • 如何从库中读取元件面板中的元件?
TODO 测试: 需要添加以下测试单元
  • get_pcb_layers
  • set_pcb_layer_visibility
  • layout_duplicator
  • get_pcb_screenshot
上一篇
spotify-mcp
下一篇
SVM_AI