关于 KiCad Tools
mcp-server-kicad 为 KiCad 项目提供 MCP 工具,面向通过 AI 助手处理原理图、PCB 和制造输出的电子设计人员。它直接读写 KiCad 文件,并以仅修改指定字节为目标;项目目前处于维护模式,仅计划安全与兼容性修复。
主要功能
- 01原理图与 PCB 读取和编辑
- 02网络追踪及 ERC、DRC 检查
- 03符号与封装库浏览和编辑
- 04生成制造文件及设计导出
- 05可合并运行或拆分为五个服务
适用场景
- 01修改原理图并检查 ERC 结果
- 02调整 PCB 布局并运行 DRC
- 03追踪跨层级原理图网络
- 04导出 Gerber、BOM、PDF 或网表
MCP 相关
该项目提供 MCP 服务,将 KiCad 原理图、PCB、项目和库操作作为工具开放给 MCP 客户端;可统一运行,也可拆分为五个服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
109收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| schematic_path | string | 否 |
详细介绍
mcp-server-kicad
让 AI 助手编辑真实的 KiCad 项目,而不破坏项目文件。
109 个 MCP 工具,涵盖原理图绘制、PCB 布局、符号和封装库、ERC 和 DRC,以及制造文件导出。无需截图、复制粘贴,也无需手动编辑 s-expression:模型调用工具,KiCad 文件随之在磁盘上更改。
重要
维护模式。 截至 2026 年 10 月,本项目仅提供安全修复和 KiCad 兼容性修复,不计划新增工具或功能。现有安装仍可正常使用。原因
为何进入维护模式
这个插件基于一个理念构建:KiCad 文件很大,因此 AI 助手应通过工具修改文件,而不是直接编辑文本。我们将这一理念与未安装插件、但已安装 KiCad 的普通 Claude Code 进行了测试:使用相同的模型(Claude Opus 5.5)、相同的设置和相同的任务,并由 KiCad 10 本身评判每项结果(网表、板子、ERC 和 DRC)。
- 六项单独编辑,针对一个公开的 KiCad 10 设计(更改数值、设置为不贴装、替换封装、为焊盘分配网络、旋转封装、跨图纸重命名网络),每项运行三次。普通 Claude Code 18 次全部正确。使用插件时,18 次中只有 3 次正确。
- 一次包含 20 项板级编辑的长会话。 两者都正确完成了所有编辑,而插件会话消耗的上下文约为 1.8 倍。
- 通过阅读每份对话记录,发现插件失败的原因:
- 某些编辑没有对应的工具(焊盘的网络、不贴装标记、替换单个封装)。
- 插件指示模型绝不要直接编辑 KiCad 文件,因此模型停下来改为询问。
- 板同步工具重写了板上几乎所有封装,导致模型撤销了自己的工作。
- 这些测试未能验证最初的设想。 普通 Claude Code 修改了一个 2 MB 的板子,却没有读取整个文件:它搜索目标元件,只编辑所需的行。
这些都是针对单个设计的小规模测试,并不能代表所有板子或模型。但结果足以让我们停止添加工具。测试材料未公开,因为所用设计没有附带许可证。
替代方案: 使用安装了 KiCad 的编码 Agent,例如 Claude Code。要求它在完成前使用 kicad-cli 检查更改(导出网表、ERC、DRC)。
仍欢迎提交 KiCad 兼容性问题报告和修复。
效果展示
"Add a 100 nF decoupling cap on U1's VCC pin, then check ERC."
get_pin_positions locate U1's VCC and GND pins
auto_place_decoupling_cap place C3 and wire both pins to their nets
run_erc report what the change broke
"Now push the netlist to the board and route it."
update_pcb_from_schematic sync footprints and pad nets onto the PCB
autoroute_pcb route with Freerouting
run_drc clearance, width, and unconnected checks
每个工具都直接操作真实文件,写入操作只会更改你指定的字节。无法正确完成的编辑会被拒绝,并保持文件原样。KiCad 本身仅在两种情况下写入设计文件:升级库,以及 autoroute_pcb 生成布线副本时;后者会创建一块新板,不会改动你的板子。
快速开始
Claude Code
安装插件。它会配置服务器,并随附设计技能:
claude plugin marketplace add ProductOfAmerica/mcp-server-kicad
claude plugin install kicad
Claude Desktop
从最新版本下载 kicad-<version>.mcpb,然后依次从 Settings 和 Extensions 安装。
Claude Desktop 会获取 Python 和软件包本身;你需要安装 KiCad,此外,autoroute_pcb 还需要 Java 25 或更高版本。
Desktop 不会在你的项目目录中运行,因此请填写它要求提供的原理图、板和导出路径。除非 KiCad 安装在不常见的位置,否则 kicad-cli 字段留空即可。设计技能仅适用于 Claude Code。
其他所有客户端
pip install mcp-server-kicad
然后将 MCP 客户端指向统一服务器,并在 env 中用绝对路径指定原理图、板和导出文件夹,这样工具无需每次调用时都收到路径:
{
"mcpServers": {
"kicad": {
"command": "uvx",
"args": ["--from", "mcp-server-kicad", "mcp-server-kicad"],
"env": {
"KICAD_SCH_PATH": "/path/to/project/project.kicad_sch",
"KICAD_PCB_PATH": "/path/to/project/project.kicad_pcb",
"KICAD_OUTPUT_DIR": "/path/to/project"
}
}
}
}
这一个条目会注册全部 109 个工具。如果客户端在你的项目文件夹中启动服务器,则可以省略 env:服务器会从其中唯一的 .kicad_pro 文件获取路径(参见路径解析方式)。
想把工具拆分到五个较小的服务器中?请参见配置。
你将获得
五个工具服务器
可将它们作为一个统一服务器运行,也可以在需要减少上下文中的工具数量时分别运行。
| 服务器 | 工具数 | 功能 |
|---|---|---|
mcp-server-kicad-schematic | 42 | 原理图读写、网络追踪、ERC、导出(PDF、SVG、DXF、网表、BOM) |
mcp-server-kicad-pcb | 34 | 板读写、网表导入、覆铜区、DRC、自动布线、导出(Gerber、钻孔、3D、贴片文件) |
mcp-server-kicad-project | 24 | 项目框架搭建、层次化图纸、层次结构验证、注释、跨图纸网络追踪 |
mcp-server-kicad-symbol | 5 | 符号库浏览、创建、SVG 导出、格式升级 |
mcp-server-kicad-footprint | 4 | 封装库浏览、SVG 导出、格式升级 |
六项设计技能(Claude Code 插件)
仅有工具,就能让模型点击每个按钮。随附的技能会教它该点哪些按钮、按什么顺序操作,以及如何判断“完成”。
| 技能 | 适用时机 |
|---|---|
using-kicad | 开始任何电子或 EDA 对话时。会引导至下方合适的技能 |
circuit-design | 在创建任何文件之前,选择拓扑结构、稳压器和元件值 |
schematic-plan | 规划精确的摆放坐标和连线。仅规划,不写入文件 |
schematic-design | 执行该计划,或修改现有原理图 |
pcb-layout | 摆放封装、布线、覆铜区、层叠结构和走线宽度 |
verification | 处理 ERC 和 DRC 故障、未连接网络以及导出准备 |
设计技能会先将其产物交给独立的审查子 Agent(agents/)检查,再继续下一步,因此不合格的 BOM 或摆放计划会在变成原理图之前被发现。
配置
拆分服务器
需要只加载部分工具时,可使用五个条目,而不是一个:
五服务器 MCP 配置
{
"mcpServers": {
"kicad-schematic": {
"command": "uvx",
"args": ["--from", "mcp-server-kicad", "mcp-server-kicad-schematic"]
},
"kicad-pcb": {
"command": "uvx",
"args": ["--from", "mcp-server-kicad", "mcp-server-kicad-pcb"]
},
"kicad-symbol": {
"command": "uvx",
"args": ["--from", "mcp-server-kicad", "mcp-server-kicad-symbol"]
},
"kicad-footprint": {
"command": "uvx",
"args": ["--from", "mcp-server-kicad", "mcp-server-kicad-footprint"]
},
"kicad-project": {
"command": "uvx",
"args": ["--from", "mcp-server-kicad", "mcp-server-kicad-project"]
}
}
}
除非客户端在项目文件夹中启动服务器,否则请为每个条目添加其他所有客户端中的 env 块;对于库服务器,还需设置 KICAD_SYM_LIB 或 KICAD_FP_LIB。
每个服务器也可以直接运行:
uvx --from mcp-server-kicad mcp-server-kicad-schematic
优先级从高到低:
- 工具参数。 每个工具都接受显式路径。
- 环境变量。 环境变量会覆盖自动检测的任何内容。
- 自动检测。 扫描工作目录以查找
.kicad_pro,并据此推导原理图、板和库的路径。
| 变量 | 指向 |
|---|---|
KICAD_SCH_PATH | .kicad_sch 原理图文件 |
KICAD_PCB_PATH | .kicad_pcb 电路板文件 |
KICAD_SYM_LIB | .kicad_sym 符号库文件 |
KICAD_FP_LIB | .pretty 封装库目录 |
KICAD_OUTPUT_DIR | 导出文件和报告的写入位置 |
要求
-
Python 3.11+
-
KiCad 9.x 或 10.x,仅供调用 KiCad 的工具使用:
kicad-cli:ERC、DRC、导出、作业集、get_version、库升级和update_pcb_from_schematicpcbnewPython 绑定:fill_zones和autoroute_pcb(后者还需要 Java 25 或更高版本;请参阅下载 Freerouting)- KiCad 自带库:放置自带符号或封装时需要
其他所有工具都直接解析文件,无需 KiCad。
CI 覆盖 Linux(KiCad 9 和 10)、macOS 和 Windows(KiCad 10),以及 Python 3.11 到 3.14。
下载 Freerouting
autoroute_pcb 会运行 Freerouting。
除非 FREEROUTING_JAR 指定了 jar 文件,否则首次调用时会从
https://github.com/freerouting/freerouting/releases/download/v2.5.0/freerouting-2.5.0.jar
下载 Freerouting 2.5.0,即 freerouting-2.5.0.jar(65 MB,需要 Java 25 或更高版本),并将其缓存为
~/.local/share/mcp-server-kicad/freerouting-2.5.0.jar
(Windows 上为 %USERPROFILE%\.local\share\mcp-server-kicad\)。保存下载文件前,以及每次使用缓存副本时,都会将其 SHA-256 与此软件包中固定的值进行校验。校验不匹配的下载不会保存;校验不匹配的缓存副本不会运行,并会重新下载。
运行 Freerouting 时会使用 --gui.enabled=false 和
--usage_and_diagnostic_data.disable_analytics=true,这是其文档为无头运行和不发送使用数据提供的设置,因此不会打开窗口,分析功能也会保持关闭。启动时,Freerouting 仍会向 GitHub 查询最新版本;它没有提供关闭此功能的设置。
若要跳过下载,请将 FREEROUTING_JAR 设为你信任的 Freerouting
jar 文件的绝对路径。该 jar 文件会按原样使用,不进行哈希校验。相对路径或指向不存在文件的路径会被忽略,程序将继续下载。较早版本会在同一文件夹中缓存未固定版本的 freerouting.jar;现在不再读取该文件,可以将其删除。
查找 KiCad 安装位置
标准安装无需配置。程序会先在 PATH 中查找 kicad-cli,然后查找 macOS 上的
/Applications/KiCad/KiCad.app,最后按从新到旧的顺序查找 Windows 上的
Program Files 和 AppData。自带库和 pcbnew 的 Python 会根据其位置查找。对于特殊安装:
| 变量 | 覆盖内容 |
|---|---|
KICAD_CLI_PATH | kicad-cli 可执行文件,以及根据其位置推导出的所有内容 |
KICAD_SYMBOL_DIR | 存放自带 .kicad_sym 库的目录 |
KICAD_PYTHON | pcbnew 使用的解释器(fill_zones、autoroute_pcb),可设为绝对路径或 PATH 中的名称 |
如果没有 kicad-cli,需要它的工具仍会列出,但会报错并指出 KICAD_CLI_PATH。
KiCad 10 文件
该服务自身的读写功能同样支持 KiCad 9 和 10 的原理图、PCB、符号库和封装,且不会更改任何非指定字节(参见 docs/adr-cst-substrate.md)。交由 KiCad 自行处理的任务只有在安装版本能够加载文件时才能成功,而 KiCad 9 无法加载 KiCad 10 的 PCB:
fill_zones和autoroute_pcb在启动前会拒绝使用 KiCad 9pcbnew处理 KiCad 10 的 PCB;请安装 KiCad 10,或将KICAD_PYTHON指向 KiCad 10。使用 KiCad 10 的pcbnew处理 KiCad 9 的 PCB 时,autoroute_pcb可以正常工作,但会警告路由后的副本将以 KiCad 10 格式返回。它绝不会触碰原始 PCB。upgrade_symbol_lib和upgrade_footprint_lib会按设计交由 KiCad 重写文件。每个文件仅在内容发生变化时才会被原子替换,因此升级中断不会损坏任何文件。备份会保存为<name>.bak,每次运行都会覆盖。
Windows:受控文件夹访问
Defender 的受控文件夹访问会阻止未识别的应用写入 Documents,而 KiCad 会在此处保存数据。因此,kicad-cli 每次调用时都会在启动阶段崩溃(退出代码 3221225477),包括 --version,且错误看起来像是文件缺失:error 2: The system cannot find the file specified。
该服务会尝试绕过此问题:将 KICAD_DOCUMENTS_HOME 指向一个不受保护的本地文件夹后重试一次,并在本次会话中继续使用该设置。你可以自行设置 KICAD_DOCUMENTS_HOME 来指定文件夹(这样会关闭重试)。
无法修复你的项目文件。 如果项目位于 Documents 下,写入工具也会以同样的方式失败。请移动项目,或前往 Windows 安全中心 > 病毒和威胁防护 > 勒索软件防护 > 允许应用通过受控文件夹访问,将这些工具加入允许列表。
工具参考
原理图(42 个工具)
读取
| 工具 | 描述 |
|---|---|
get_schematic_summary | 获取原理图图纸中的项目数量 |
list_schematic_components | 列出图纸上的所有元件(符号) |
list_schematic_labels | 列出图纸上的所有网络标签 |
list_schematic_wires | 列出图纸上的所有导线 |
list_schematic_global_labels | 列出图纸上的所有全局标签 |
list_schematic_hierarchical_labels | 列出图纸上的所有层次标签 |
list_schematic_sheets | 列出图纸上的所有层次图纸块 |
list_schematic_junctions | 列出图纸上的所有连接点 |
list_schematic_no_connects | 列出图纸上的所有未连接标记 |
list_schematic_bus_entries | 列出图纸上的所有总线入口 |
get_symbol_pins | 获取原理图 lib_symbols 中某个符号的引脚信息 |
get_pin_positions | 获取已放置元件的绝对引脚位置,并考虑旋转和镜像 |
get_net_connections | 获取指定网络的所有连接(通过多跳 BFS 追踪导线) |
list_unconnected_pins | 列出 ERC 报告为未连接的引脚,位置以毫米为单位;子图纸有自己的引脚列表,根图纸取自其项目 |
写入
| 工具 | 描述 |
|---|---|
place_component | 在原理图中放置元件 |
remove_component | 按位号移除元件 |
move_component | 移动或旋转已放置的元件。元件的字段会随之移动;导线保持原位,与 KiCad 自带的“移动”操作相同;结果会列出所有连接发生变化的引脚。在符号自身位置调用时,会在原地旋转符号,不会吸附 |
set_component_property | 设置已放置元件的任意属性(Value、Reference、Footprint 等) |
add_lib_symbol | 将 .kicad_sym 库中的符号定义加载到原理图中 |
add_wires | 按照 KiCad 的导线工具方式,在点之间添加一条或多条导线:三条或更多导线或引脚相交处会形成连接点,导线会在此处分段 |
remove_wire | 移除一段导线 |
add_junctions | 在三条或更多导线或引脚相交处添加一个或多个连接点,并使穿过连接点的导线分段;其他位置不允许添加 |
remove_junction | 移除连接点,并合并其分隔的导线,效果与 KiCad 的删除操作相同 |
add_label | 在指定位置添加网络标签 |
remove_label | 移除网络标签或全局标签 |
add_global_label | 添加可在所有图纸间显示的全局网络标签 |
add_hierarchical_label | 添加用于图纸间连接的层次标签 |
remove_hierarchical_label | 按名称或 UUID 移除层次标签 |
modify_hierarchical_label | 修改层次标签的文本、形状或位置 |
add_power_symbol | 放置电源符号(VCC、GND、+3V3、PWR_FLAG 等) |
add_text | 在原理图中添加文本注释 |
remove_text | 按内容移除文本注释,可按位置筛选 |
wire_pins_to_net | 将一个或多个引脚连接到指定网络 |
connect_pins | 将两个元件引脚连接起来 |
auto_place_decoupling_cap | 在 IC 附近自动放置去耦电容 |
no_connect_pin | 在未使用的引脚上放置无连接标记(幂等) |
remove_no_connect | 移除引脚上的一个或多个无连接标记 |
set_page_size | 设置原理图页面尺寸 |
分析与导出
| 工具 | 描述 |
|---|---|
run_erc | 运行电气规则检查,位置单位为毫米;从项目根目录检查子图纸,并为其生成单独的违规项;使用 project_path 指定项目;如果运行未生成报告,则会报错,并保留 output_dir 原有内容 |
export_schematic | 将原理图导出为 PDF、SVG 或 DXF |
export_netlist | 导出原理图网表 |
export_bom | 将物料清单导出为 CSV |
PCB(34 个工具)
读取
| 工具 | 描述 |
|---|---|
list_pcb_footprints | 列出电路板上的所有封装 |
list_pcb_traces | 列出电路板上的所有走线 |
list_pcb_nets | 列出电路板上的所有网络 |
list_pcb_zones | 列出电路板上的所有区域 |
list_pcb_layers | 列出电路板上的所有层 |
list_pcb_graphic_items | 列出电路板上的所有图形项 |
get_board_info | 电路板摘要:封装数、走线数、网络数、厚度 |
get_footprint_pads | 获取已放置封装的焊盘信息 |
get_footprint_bounds | 获取已放置封装在电路板坐标中的边界框 |
写入
| 工具 | 描述 |
|---|---|
place_footprint | 在电路板上放置封装 |
move_footprint | 将封装移动到新位置 |
remove_footprint | 按位号移除封装 |
add_trace | 在两点之间添加一段走线 |
remove_traces | 移除符合筛选条件的走线段 |
set_trace_width | 更改现有走线的宽度 |
remove_dangling_tracks | 检测并移除端点未连接的走线段 |
add_via | 在指定位置添加过孔 |
add_thermal_vias | 在封装焊盘下方添加网格状散热过孔 |
add_pcb_text | 在电路板上添加文本(丝印层、装配层等) |
add_pcb_line | 添加图形线条(板边层、丝印层等) |
add_copper_zone | 创建未填充的铜区 |
add_keepout_zone | 创建禁止区,限制走线、过孔、焊盘、铺铜或封装 |
fill_zones | 填充电路板上的所有铜区 |
set_net_class | 创建或更新带有设计规则的网络类 |
update_pcb_from_schematic | 将原理图网表导入或同步到电路板:封装及其字段和封装筛选条件、DNP 和 BOM 标志(KiCad 10 还包括位置文件标志)、图纸关联和焊盘网络;通过项目和用户的 fp-lib-table 加载库 |
分析和导出
| 工具 | 描述 |
|---|---|
run_drc | 对电路板运行设计规则检查 |
check_placement | 检查拟放置的封装位置是否与禁止区或板边冲突 |
validate_board | 检查每个已放置的封装是否与禁止区或板边冲突 |
autoroute_pcb | 使用 Freerouting 自动布线器进行走线 |
export_pcb | 将电路板图层导出为 PDF、SVG 或 DXF |
export_gerbers | 导出所有图层或指定图层列表的 Gerber 文件 |
export_3d | 导出 3D 模型(STEP/STL/GLB),或将 3D 视图渲染为 PNG |
export_positions | 将贴片位置文件导出为以毫米为单位的 CSV |
export_ipc2581 | 导出为 IPC-2581 格式,以交换制造数据 |
项目(24 个工具)
项目搭建
| 工具 | 描述 |
|---|---|
create_project | 创建 KiCad 9 项目(.kicad_pro 和根 .kicad_sch;不含 .kicad_prl) |
create_schematic | 创建空白原理图文件 |
create_symbol_library | 创建空白符号库文件 |
create_sym_lib_table | 创建 sym-lib-table 文件 |
图纸管理
| 工具 | 描述 |
|---|---|
add_hierarchical_sheet | 添加层次图纸,并在子图纸中添加匹配标签;所有内容都会先经过检查,再进行写入 |
remove_hierarchical_sheet | 从父图纸中移除层次图纸块 |
modify_hierarchical_sheet | 修改图纸名称、文件、宽度或高度;调整大小时会使引脚保持在边缘,并移动连接到这些引脚的导线 |
move_hierarchical_sheet | 将图纸块移动到新位置,包括引脚 |
add_sheet_pin | 在图纸块的左边缘或右边缘的第一个空位添加引脚 |
remove_sheet_pin | 从层次图纸块中移除引脚 |
duplicate_sheet | 复制图纸:同时复制图纸块和子文件,分配最小可用页码,并将元件编号与原图纸错开;如果图纸本身包含子图纸,则不允许复制 |
reorder_sheet_pages | 通过重写页码,将图纸按给定顺序排列(即 KiCad 列出的顺序);请在根原理图上调用此工具 |
层次结构检查
| 工具 | 描述 | |------|-------------| | `is_root_schematic` | 检查原理图是否为项目根原理图或其中一个图页,包括项目下级文件夹中的图页;未被任何图页使用的文件为根原理图 | | `list_hierarchy` | 列出从根节点开始的完整图页层级树 | | `get_sheet_info` | 获取图页详情,包括引脚和标签的匹配状态 | | `validate_hierarchy` | 检查每个图页中的孤立标签和引脚、方向不匹配、重复位号、留在线路内的连接点和总线入口端,以及未连接标记和未接到镜像或旋转元件引脚上的线路端点;对于工具可修复的问题,还会提供对应的修复调用 |跨图页分析
| 工具 | 描述 |
|---|---|
trace_hierarchical_net | 通过引脚和标签跨层级追踪网络 |
list_cross_sheet_nets | 列出所有跨越图页边界的网络 |
get_symbol_instances | 列出根原理图中的符号实例 |
批注、导出、实用工具
| 工具 | 描述 |
|---|---|
annotate_schematic | 自动分配位号,并遵循层级关系 |
export_hierarchical_netlist | 导出包含层级信息的网表(需要 kicad-cli) |
flatten_hierarchy | 将层级原理图展平为新的单页文件,其网表与层级原理图一致;如果无法保持一致(例如跨图页总线名称),则拒绝操作且不写入任何内容 |
run_jobset | 对项目所在目录中的项目运行 KiCad 作业集;若没有运行任何任务或有任务失败,则返回错误 |
get_version | 获取 KiCad 版本信息 |
符号和封装库(9 个工具)
符号
| 工具 | 描述 |
|---|---|
list_lib_symbols | 列出 .kicad_sym 库中的所有符号 |
get_symbol_info | 获取库符号的详细引脚和属性信息 |
add_symbol | 向 .kicad_sym 库添加新符号 |
export_symbol_svg | 将符号库导出为 SVG 图像 |
upgrade_symbol_lib | 将符号库升级为当前 KiCad 格式 |
封装
| 工具 | 描述 |
|---|---|
list_lib_footprints | 列出 .pretty 库目录中的所有封装 |
get_footprint_info | 获取 .kicad_mod 文件的焊盘和轮廓详情 |
export_footprint_svg | 将封装导出为 SVG |
upgrade_footprint_lib | 将封装库升级为当前 KiCad 格式 |
调试
使用 MCP Inspector手动驱动服务:
npx -y @modelcontextprotocol/inspector uvx --from mcp-server-kicad mcp-server-kicad
参与贡献
欢迎提交问题和拉取请求。开发环境设置请参阅 CONTRIBUTING.md,有关字节保留写入路径背后的架构决策,请参阅 docs/adr-cst-substrate.md。
许可证
GPL-3.0-or-later。截至 0.20.1(含)的版本采用 MIT 许可证;详见 NOTICE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。