☰
拆解KiCAD MCP Server架构:TypeScript MCP协议层与Python pcbnew层如何协同的完整指南
2026/10/3 17:10:38 网站建设 项目流程

拆解KiCAD MCP Server架构:TypeScript MCP协议层与Python pcbnew层如何协同的完整指南

【免费下载链接】KiCAD-MCP-ServerKiCAD MCP is a Model Context Protocol (MCP) implementation that enables Large Language Models (LLMs) like Claude to directly interact with KiCAD for printed circuit board design.项目地址: https://gitcode.com/gh_mirrors/ki/KiCAD-MCP-Server

KiCAD MCP Server 是一个开源的Model Context Protocol(MCP)实现,它让 Claude 等 AI 助手能够直接操作 KiCAD 完成 PCB 设计——从创建工程、放置元件、走线布线到导出生产文件,全部通过对话完成。理解它的架构,是理解"AI 如何安全地驱动专业工程软件"的绝佳样本:整个系统由TypeScript 写的 MCP 协议层(src/)和Python 写的 pcbnew 接口层(python/)组成,两层通过一条 JSON 管道协同工作。

🗺️ 三层架构全景:请求是如何流动的

先看整体调用链(摘自 docs/ARCHITECTURE.md):

AI 助手(Claude 等) │ MCP 协议(JSON-RPC 2.0 over STDIO) ▼ TypeScript MCP Server(src/) │ 派生 Python 子进程,传递 JSON 命令 ▼ Python KiCAD 接口(python/kicad_interface.py) │ pcbnew SWIG API 或 KiCAD 9.0 IPC API ▼ KiCAD 9.0+

两层的职责划分非常清晰:

层语言职责为什么用它
MCP 协议层TypeScript实现 MCP 协议、注册工具 Schema、参数校验、管理 Python 子进程MCP 官方 SDK 对 TS 支持最好
pcbnew 后端层Python读写 .kicad_pcb / .kicad_sch、执行布线与设计规则检查pcbnew 官方只提供 Python API
KiCADC++真正的 PCB 引擎唯一权威的数据源

一句话总结:TypeScript 负责"听懂 AI 说话",Python 负责"动手干活"。

🔌 TypeScript 层:200+ 工具是怎么注册和调用的

服务端入口是 src/server.ts,启动时做三件事:

  1. 注册全部工具——每个工具类别一个文件(如 src/tools/board.ts、src/tools/routing.ts),统一通过register*Tools(server, callKicadScript)挂载;
  2. 连接 STDIO 传输——刻意放在最前面(Phase 0),因为 Python 端加载 pcbnew 在 macOS 上需要 55~125 秒,先连上通道才能保证 AI 客户端的请求不被积压;
  3. 寻找正确的 Python 解释器——按"项目 venv → KICAD_PYTHON 环境变量 → KiCAD 自带 Python → 系统 Python"的顺序探测,并顺手验证import pcbnew是否成功,失败时会输出针对 Windows / Linux 的排错提示。

一个典型的工具注册长这样:工具名、描述、Zod 参数 Schema、以及一个把参数转交给callKicadScript(command, args)的 handler。此外还有 src/tools/registry.ts 和 src/tools/router.ts 提供search_tools等"工具发现"能力——当 200+ 个工具全部单独注册时,AI 可以用关键词搜索快速找到目标工具,而不必逐个读 Schema。

📡 STDIO 上的 JSON 桥接:两层协同的核心

TypeScript 与 Python 之间没有复杂的 RPC 框架,只有一条极简的换行分隔 JSON管道,核心实现在 src/server.ts 的callKicadScript():

→ {"command": "place_component", "params": {...}, "requestId": 42} ← {"success": true, "message": "...", "_requestId": 42, "_backend": "swig"}

围绕这条管道,有四个精巧的协同机制值得新手学习:

  • 请求队列串行化:pcbnew 不是线程安全的,所以所有命令进入requestQueue逐条处理,天然避免了对同一块板的并发写冲突;
  • requestId 配对:每条请求带自增 ID,Python 端原样回显_requestId。这样即使某条命令超时,迟到的响应也会被丢弃而不是错误地"喂给"下一条请求——注释里提到的 issue #373 就是没有这个机制时管道永久错位的真实事故;
  • ready 握手:Python 主循环起来后先发送{"type":"ready"}(见 python/kicad_interface.py),TypeScript 端waitForReady()等到这条消息才放行业务命令;
  • warmup 预热:首条命令会触发 pcbnew 完整初始化(macOS 上约 60 秒),服务端在启动阶段就发一条_warmup命令把这个开销"提前付清",避免 AI 用户第一次调用工具时干等一分钟。

🐍 Python 层:一张命令路由表 + 双后端

Python 侧入口 python/kicad_interface.py 有一个近 7000 行的主文件,但结构并不复杂:

  1. stdin 循环逐行读取 JSON 命令;
  2. command_routes路由表(python/kicad_interface.py)把命令名映射到具体 handler——create_project、place_component、route_trace、run_drc等数十个类别,每个类别对应 python/commands/ 下的一个模块;
  3. handler 执行后统一返回{success, message, ...}结构,由_write_response()写回 stdout。

更值得留意的是后端抽象层python/kicad_api/,由 python/kicad_api/factory.py 自动探测选择:

后端原理特点
SWIG(默认)pcbnew 官方 SWIG 绑定,直接操作文件无需 KiCAD 运行,改完内存后写回磁盘
IPC(实验性)通过 KiCAD 9.0 的 IPC socket 连接正在运行的 KiCAD改动实时出现在界面,GUI 关闭自动降级回 SWIG

也就是说,同一条place_component命令,Python 层会根据环境自动决定"改文件"还是"实时操控 GUI",TypeScript 层完全无感知——响应里的_backend和_realtime字段只是给 AI 一个知情提示。

🛡️ 四个让协同稳定的细节

架构文档把这些列为关键设计决策(docs/ARCHITECTURE.md):

  1. 自动保存:所有会修改板卡的 SWIG 操作执行后立即落盘,防止内存态修改丢失;
  2. 按命令类型分级超时:普通命令与run_drc、refill_zones等重命令使用不同超时(见 src/command-timeout.ts),避免"一刀切"误杀;
  3. fd 级输出隔离:pcbnew 的 C++ 代码会往 stdout 打警告噪声,Python 端在主循环里用os.dup把 JSON 响应独占真实 stdout、把 C 级输出重定向到 stderr,保证 TypeScript 解析器永远只看到干净的 JSON 帧;
  4. 子进程自愈:kicad_interface.py崩溃时 TypeScript 端会重建子进程(tests/test_worker_survives_bad_command.py专门覆盖此场景),一次错误命令不会拖死整个服务。

🚀 新手读源码的推荐路线

  • 第一站:docs/ARCHITECTURE.md——本文所有结论的官方出处;
  • 第二站:src/server.ts 的start()与callKicadScript()——看清"桥"的两端;
  • 第三站:python/kicad_interface.py 的main()与command_routes——看清命令如何落地;
  • 扩展工具时按官方五步走:定义 TS Schema → 注册 → 在 src/server.ts 挂载 → 写 Python handler →npm run build+npm run test:py验证。

小结:KiCAD MCP Server 的本质是一个"双语言协程"——TypeScript 守住 MCP 协议边界,Python 守住 pcbnew API 边界,中间用一条带 ID 配对、串行化、可自愈的 JSON 管道连接。对想给自己的工程软件加"AI 手"的开发者来说,这套分层与桥接设计几乎可以直接照抄。

【免费下载链接】KiCAD-MCP-ServerKiCAD MCP is a Model Context Protocol (MCP) implementation that enables Large Language Models (LLMs) like Claude to directly interact with KiCAD for printed circuit board design.项目地址: https://gitcode.com/gh_mirrors/ki/KiCAD-MCP-Server

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询