使用模型上下文协议(MCP)和 Anthropic Claude 进行基于人工智能的 KiCad PCB 设计。
该项目提供了一个 MCP 服务器,该服务器将 KiCad PCB 设计工具暴露给 AI 助手,使您能够以自然语言与您的 PCB 设计进行交互。您可以要求 AI 放置组件、读取网络列表并获得布局建议。
┌─────────────┐ ┌─────────────┐ ┌──────────┐
│ 您 │ ───────▶│ AI 客户端 │ ───────▶│ Claude │
│ (用户) │ 聊天 │ (Python) │ API │ AI │
└─────────────┘ └─────────────┘ └──────────┘
│
│ MCP 协议
▼
┌─────────────┐ └──────────┘
│ MCP 服务器 │ ───────▶│ KiCad │
│ (Python) │ pcbnew │ PCBNew │
└─────────────┘ └──────────┘
适用于 KiCad 9.0+ Flatpak 安装。这是经过测试并推荐的方法。
cd ~/repos
git clone https://github.com/Pablomonte/MCP-KiCad.git
cd MCP-KiCad
flatpak install flathub org.kicad.KiCad
./kicad_flatpak_setup.sh
此脚本会自动在 KiCad Flatpak 容器内安装所需的 Python 包(mcp、anthropic、python-dotenv)。
cp .env.example .env
nano .env # 或您喜欢的编辑器
添加您的 Anthropic API 密钥:
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxx
从 https://console.anthropic.com/ 获取您的 API 密钥。
运行服务器:
./run_with_flatpak.sh # 默认使用扩展服务器(12 个工具)
适用于原生 KiCad 安装或开发目的。
克隆仓库并配置 API 密钥。
python3 -m venv venv
source venv/bin/activate # 在 Linux/Mac 上
# 或
venv\Scripts\activate # 在 Windows 上
pip install -r requirements.txt
MCP 服务器需要访问 KiCad 的 pcbnew 模块。
选项 A:使用 KiCad 的 Python
找到并使用 KiCad 的 Python 安装:
# Linux
/usr/lib/kicad/bin/python3 kicad_mcp_server_extended.py
# Mac
/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 kicad_mcp_server_extended.py
# Windows
"C:\Program Files\KiCad\9.0\bin\python.exe" kicad_mcp_server_extended.py
选项 B:链接 pcbnew 到虚拟环境
# Linux 示例
ln -s /usr/lib/python3/dist-packages/pcbnew.py venv/lib/python3.*/site-packages/
ln -s /usr/lib/python3/dist-packages/_pcbnew.so venv/lib/python3.*/site-packages/
注意:确切路径因系统而异。检查您的 KiCad 安装目录。
首先,在 KiCad PCBNew 中打开您的 PCB 项目:
kicad path/to/your/project.kicad_pcb
确保 PCB 编辑器(PCBNew)是打开的,而不仅仅是项目管理器。
选择基本服务器(4 个工具)或扩展服务器(12 个工具,推荐):
使用 Flatpak(推荐):
# 扩展服务器 - 推荐(包括制造工具)
./run_with_flatpak.sh
# 只有基本服务器
./run_with_flatpak.sh kicad_mcp_server.py
使用本地 Python:
# 如果使用虚拟环境
source venv/bin/activate
python kicad_mcp_server_extended.py # 或 kicad_mcp_server.py 用于基本
# 或使用 KiCad 的 Python
/usr/lib/kicad/bin/python3 kicad_mcp_server_extended.py
服务器将连接到当前打开的 KiCad 板,并等待 MCP 请求。
注意:如果 pcbnew 不可用,服务器将以“模拟模式”运行以供测试。
在另一个终端(激活虚拟环境)中:
python kicad_mcp_client.py kicad_mcp_server.py
您应该看到:
已连接到 KiCad MCP 服务器
可用工具:place_component, read_netlist, list_components, get_board_info
======================================================================
KiCad AI 助手
======================================================================
您可以问我帮助您设计 PCB!
...
您:
尝试这些示例查询:
基本操作:
您:列出板上的所有组件
您:将 R1 放置在 10, 20 毫米的位置
您:将电容器 C1 移动到 15, 25 毫米的位置并旋转 90 度
您:显示网络列表
您:板尺寸是多少?
您:为 LED 电路提供布局建议
制造操作(扩展服务器):
您:将 Gerber 文件导出到 ./gerber
您:生成 Excellon 格式的钻孔文件
您:为 JLCPCB 创建完整的制造包
您:导出物料清单(BOM)
您:生成拾放位置文件
您:运行设计规则检查
您:填充所有铜区
AI 将:
AI 进行更改后,请刷新 KiCad 视图以查看更新:
F5 或使用视图 → 刷新该项目包含两个 MCP 服务器变体:
| 功能 | 基本服务器 | 扩展服务器 |
|---|---|---|
| 脚本 | kicad_mcp_server.py | kicad_mcp_server_extended.py |
| 工具数量 | 4 个工具 | 12 个工具 |
| 使用场景 | 组件放置及查询 | 完整制造工作流 |
| 推荐 | 测试及学习 | 生产用途 |
两个服务器都包含这些基本工具:
将组件移动到 PCB 上的特定位置。
参数:
reference(字符串):组件参考(例如,“R1”,“U1”)x_mm(数字):毫米单位的 X 位置y_mm(数字):毫米单位的 Y 位置rotation_deg(数字,可选):旋转角度(度)列出 PCB 上的所有组件及其当前位置。
返回值:包含参考、值、位置、旋转和层的 JSON 组件数组
从板上读取网络列表信息。
返回值:包含名称和网络代码的 JSON 网络数组
获取有关 PCB 的一般信息。
返回值:板尺寸、层数、组件数、文件名
扩展服务器增加了这些制造和验证工具:
导出 Gerber 文件(RS-274X 格式)用于 PCB 制造。
参数:
output_dir(字符串):输出目录路径layers(数组,可选):要导出的具体层返回值:生成的 Gerber 文件列表
导出 Excellon 格式的钻孔文件。
参数:
output_dir(字符串):输出目录路径merge_pth_npth(布尔值,可选):合并 PTH 和 NPTH 至一个文件返回值:生成的钻孔文件路径
创建一个完整的制造包作为 ZIP 文件。
参数:
output_path(字符串):ZIP 文件输出路径返回值:包路径和包含文件列表
导出物料清单(CSV 格式)。
参数:
output_path(字符串):CSV 文件输出路径include_dnp(布尔值,可选):包含“不安装”组件返回值:BOM 文件路径和组件数量
导出用于拾放机器的组件位置。
参数:
output_path(字符串):CSV 文件输出路径side(字符串,可选):“front”、“back”或“both”返回值:位置文件路径和组件数量
对 PCB 运行设计规则检查。
参数:
report_path(字符串,可选):DRC 报告路径返回值:DRC 状态、错误数量、警告数量
填充 PCB 上的铜区。
参数:
zone_names(数组,可选):要填充的具体区域(默认:全部)返回值:填充的区域数量
获取关于 PCB 上的走线/轨迹的信息。
参数:
net_name(字符串,可选):按网络名称过滤返回值:走线数量、总长度、层分布
来自板原理图的 JSON 组件列表
通用 PCB 板信息和设置
获得简单电路的 AI 布局指导。
参数:
type(字符串):电路类型 - “LED”、“电源供应”、“放大器”等返回值:指定电路类型的布局指南和最佳实践
MCP-KiCad/
├── kicad_mcp_server.py # 暴露 KiCad 工具的 MCP 服务器
├── kicad_mcp_client.py # 使用 Claude 的 AI 客户端
├── requirements.txt # Python 依赖项
├── .env.example # 示例环境配置
├── .env # 您的 API 密钥(不在 git 中)
├── .gitignore # Git 忽略规则
└── README.md # 本文档
过孔宽度 API 更改:
get_track_info 可能返回 None 对于具有过孔的板上的 total_length_mmPCB_VIA::GetWidth() 方法签名引起可选字段:
get_board_info 字段可能会返回 NoneNone 值测试状态:
详细信息见 [FABRICATION.md](FABRICATION.md#via-width-api-change-kicad- 9x)。
服务器将以模拟模式运行。要修复:
.env.example 创建 .env 文件ANTHROPIC_API_KEY=sk-ant-....env 与脚本在同一目录中症状:
/run/build/kicad/pcbnew/pcb_track.cpp(381): assert "false" failed in GetWidth()
解释:
PCB_VIA::GetWidth() 方法签名的 API 更改引起get_track_info 操作期间出现影响:
get_track_info 可能返回 None 对于 total_length_mm解决方法:
测试: 成功测试了 Olivia Control v0.2 板(38 个过孔) - 所有 12 个工具功能正常。
详细信息见 FABRICATION.md。
要使用 Grok 而不是 Claude:
kicad_mcp_client.py:# 用 xAI 客户端替换 Anthropic 客户端
from openai import OpenAI # xAI 使用 OpenAI 兼容 API
client = OpenAI(
api_key=os.getenv("XAI_API_KEY"),
base_url="https://api.x.ai/v1"
)
任何 MCP 兼容客户端都可以使用 MCP 服务器:
python kicad_mcp_server.py
然后使用 stdio 传输连接到任何 MCP 客户端。
通过以下方式添加新工具:
list_tools() 处理程序中定义工具