/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
用 AI 接入 KiCad 实时画原理图/PCB:完整教程(Codex + kicad-mcp)
本文介绍如何把 AI(Codex / Claude Code / VSCode 等支持 MCP 的客户端)接入 KiCad, 让 AI 通过调用 KiCad 的 IPC API 实时操作原理图和 PCB,并用脚本批量生成重复单元。
一、技术方案选择
实现「对话式生成 KiCad 原理图」主要有三类方案:
本文选择方案 1,核心组件是华秋开源的 kicad-mcp。
二、整体架构
┌──────────────┐ MCP(stdin/stdout) ┌──────────────┐ nng/ipc ┌─────────────┐
│ AI 客户端 │ ◄──────────────────► │ kicad-mcp │ ◄──────────► │ KiCad │
│ (Codex/Claude)│ │ (Python) │ IPC API │ (10.x) │
└──────────────┘ └──────────────┘ └─────────────┘
- AI 客户端通过 MCP 协议发现工具;
- kicad-mcp 把工具调用翻译成对 KiCad IPC API 的请求;
- KiCad 10 内置 IPC API,通过命名管道(Windows)监听外部请求。
三、安装与配置
1. 安装 KiCad
下载安装 KiCad,建议 10.x。本文使用 KiCad 10.0.2。
2. 安装 kicad-mcp
# 推荐:uvx 免安装
uvx kicad-mcp –editor-type schematic
uvx kicad-mcp –editor-type pcb
# 或:克隆 + venv
git clone https://github.com/Huaqiu-Electronics/kicad-mcp.git
cd kicad-mcp && uv sync
.venv/Scripts/python.exe -m kicad_mcp –editor-type schematic
需要 Python 3.11+ 和 uv。
3. 配置 Codex(~/.codex/config.toml)
[mcp_servers.kicad-schematic]
enabled = true
command = "uvx"
args = ["kicad-mcp", "–editor-type", "schematic"]
startup_timeout_sec = 120
[mcp_servers.kicad-pcb]
enabled = true
command = "uvx"
args = ["kicad-mcp", "–editor-type", "pcb"]
startup_timeout_sec = 120
4. 启动顺序(关键)
因为 kicad-mcp 启动时会先查找 kicad.exe / pcbnew.exe / eeschema.exe 进程, 找到后拼出 socket 地址 ipc://kicad_sdk_pair-{pid}-{editor} 再连接。KiCad 没开就会报 “KiCad not found”。
5. 验证连接
让 AI 调用 queryCurrentFrameType,返回 FRAME_SCH(原理图)/ FRAME_PCB_EDITOR(PCB)即成功。
四、两种设计方式
方式一:MCP 直接绘图(适合小批量)
直接对 AI 说:
画一个 5V 转 3.3V 的 LDO 原理图,含输入输出电容和使能电阻。
AI 会用 place_symbol、draw_multi_wires、create_global_label 等工具实时画到 KiCad。
方式二:脚本批量生成(适合大量重复单元)
KiCad 的 .kicad_sch 是文本格式的 S-表达式,可以脚本直接生成。 本文的 LED 驱动板有 72 个重复的三极管单元,逐条 MCP 调用太慢,所以用脚本生成。
五、脚本生成 .kicad_sch 的踩坑总结
1. lib_symbols 符号名要带前缀
.kicad_sym 里是 (symbol "R"),但 .kicad_sch 里要写 (symbol "R:R")(库名:符号名), 否则 KiCad 找不到引脚定义。
2. 删除 .kicad_sym 特有字段
pin_numbers / pin_names / in_pos_files 这些字段 .kicad_sch 不需要,必须删。
3. 引脚 Y 轴反转
符号库是「Y 向上」,原理图是「Y 向下」:
绝对坐标 = (sym_x + pin_x, sym_y – pin_y)
例如 R 符号 pin1 在 (0, 3.81),放到 (100, 78) 后 pin1 在 (100, 74.19)(上方)。
4. 网络标签用 global_label
跨页连接用 global_label,不是本地 label。
5. 单元间距要够大
重复单元间距小于单元自身跨度时,相邻单元的导线/标签会互相短路。 本例垂直跨度 54mm,最初行间距 52mm 导致 D_OUT 与 -5V 短路,改成 60mm 解决。
六、网表校验
D:\\Kicad\\bin\\kicad-cli.exe sch export netlist –output out.net my_board.kicad_sch
对照手算的节点数检查每个网络(verify_net.py 见仓库):
| D_OUT | 72 | 72 个 6.8K 基极电阻上端 |
| -5V | 144 | 72 发射极 + 72 个 820Ω 下拉 |
| GND | 72 | 72 个集电极下拉 |
| H_IN | 144 | 72 集电极 + 72 个 820Ω 下拉 |
七、总结
- 接入链路:Codex → MCP → kicad-mcp → KiCad IPC API → 实时操作。
- 启动顺序:先 KiCad,后 Codex。
- 大批量:脚本生成 .kicad_sch + kicad-cli 校验,比逐条 MCP 快得多。
- 重点坑:符号名前缀、Y 轴反转、单元间距、global_label。
附:仓库地址与源码
- 本项目:https://github.com/edisonwhz/kicad/tree/main
- kicad-mcp:https://github.com/Huaqiu-Electronics/kicad-mcp
- KiCad:https://www.kicad.org/



