内容
<img width="1732" height="1235" alt="Screenshot 2026-07-19 at 10 11 36 AM" src="https://github.com/user-attachments/assets/420a00d3-6ce6-4431-87b0-71b8e9271e6e" />
<img width="1776" height="1279" alt="Screenshot 2026-07-19 at 10 11 28 AM" src="https://github.com/user-attachments/assets/cc5a99a7-e894-490a-975a-5c25e4dcca2d" />
# 火鸟

**以提示为优先的PCB CAD工具,适用于Claude Code。** 无需原理图步骤:用纯语言描述电路板,Claude Code驱动自定义TypeScript引擎,调用MCP — 选择真实的[LCSC](https://www.lcsc.com/)元件,放置元件封装,布线连接,自动布线(使用[Freerouting](https://github.com/freerouting/freerouting)),运行DRC,并导出[JLCPCB](https://jlcpcb.com/)的制造文件包(`gerbers.zip` + `bom.csv` + `cpl.csv`)。实时浏览器视图显示电路板更新过程。
## 功能特点
- **以提示为优先的工作流程** — 34个工具涵盖整个流程:元件选择 → 放置 → 连接 → 布线 → DRC → 导出制造文件。无需原理图步骤。
- **真实元件** — LCSC关键词搜索,EasyEDA元件封装获取/解析,带有真实焊盘编号和几何信息,缓存在本地`~/.flamingo/parts/`目录下。
- **实时浏览器编辑器** — WebSocket同步的画布视图,支持选择和拖拽编辑,带有一键**锁定和布线**和**运行DRC**功能,显示红色画布标记。
- **3D视图和STEP导出** — 交互式3D电路板,带有真实供应商元件模型,3D丝印,和两种STEP导出格式:轻量型庭院块或完整细节(铜、丝印、钻孔)。
- **自动布线** — Freerouting集成,每网络布线,自动细逃脱重试,用于无法退出细间距焊盘的粗网络,以及自动接地连接。
- **铜特性** — 区浇筑与填充铜连接,保持距离,安装孔/槽,和每网络类别的轨宽/间距/过孔规则。
- **针对JLCPCB能力的DRC** — 根据层数选择的规则集:间距,轨宽,钻孔/环形/过孔最小值,铜到边缘,保持距离,孔到孔,庭院重叠,丝印叠加焊盘,未连接网络,和轮廓检查。
- **DRC中的实时库存检查** — 每个放置的元件都针对JLCPCB的组装元件库进行检查;库存不足的元件阻止导出(可豁免),低库存或未知库存报告为非阻塞性建议。
- **电路板感知丝印** — refdes标签自动放置在电路板上,焊盘安全,不重叠,通过整个电路板求解器。
- **导出制造文件** — Gerber X2 + Excellon钻孔,JLCPCB BOM/CPL,参考渲染SVG,和浏览器下载ZIP文件,适用于直接上传到JLCPCB的订单页面。
- **操作日志编辑** — 每个更改都是一个操作,带有完整的撤销/重做;电路板是纯JSON文件,在git中可以差异清理。
- **代理友好反馈** — PNG截图(带有ratsnest和DRC叠加),文本电路板摘要,和连接列表按需。
## 快速开始
```bash
npm install
npm run build
# 服务一个电路板(如果不存在,则创建board.flamingo):
node packages/server/dist/cli.js serve board.flamingo
# … 或者,一旦服务器软件包链接成功,`npx flamingo serve board.flamingo`
# 打开实时视图:
open http://localhost:4242
```
将Claude Code指向正在运行的服务器,将`.mcp.json`文件放入项目中(存储库根目录已经存在):
```json
{
"mcpServers": {
"flamingo": { "type": "http", "url": "http://localhost:4242/mcp" }
}
}
```
现在要求Claude Code构建一个电路板 — 例如 _"为我制作一个带有USB-C电源和3.3V LDO的2层ESP32-S3 breakout"_ — 并在浏览器视图中观察电路板填充。
## 需求
- **Node.js 22+**
- **Java运行时** (用于Freerouting自动布线器)。在macOS上:`brew install openjdk` (仅限 keg — 需将`/opt/homebrew/opt/openjdk/bin`添加到`PATH`或设置`JAVA_HOME`)。`freerouting.jar`在首次自动布线时下载到`~/.flamingo/`目录。
- **网络** 在首次使用时,用于从EasyEDA/LCSC API获取元件封装(之后缓存在`~/.flamingo/parts/`目录下)。
## 工作流程
```
提示 → 元件选择 → 放置 → 连接 → 布线 → DRC → 导出
```
1. **元件选择** — `parts_search`(关键词)然后`parts_get`(焊盘列表)选择真实的LCSC元件并获取其引脚编号。
2. **放置** — `new_board`,`set_board_outline`,然后`place_component` / `move_component`布局元件封装(毫米,Y轴向上)。
3. **连接** — `connect_pins`从`REFDES.PAD`引脚引用构建网络;`create_net_class` / `assign_net_class`设置轨宽/间距/过孔规则。
4. **特性** — `add_zone`(铜浇筑),`add_mounting_hole`,`add_silk_text`,`add_keepout`。
5. **布线** — `autoroute`运行Freerouting进行批量布线;`add_track` / `add_via`手动放置修复;`get_ratsnest` / `unroute`帮助迭代。
6. **DRC** — `run_drc`报告违反JLCPCB规则集的错误,根据电路板的层数检查,并实时检查JLCPCB组装库存:库存不足的元件阻止导出(可豁免),低库存或未知库存报告为非阻塞性建议。设置`FLAMINGO_STOCK_CHECK=off`跳过库存检查(例如离线)。
7. **导出** — `export_fab`运行DRC(填充区域,包括库存检查)并写入JLCPCB文件集 — 除非设置`waiveDrc`,否则拒绝任何违规。
`screenshot`在任何时候渲染电路板到PNG文件,供Claude查看进度。
## MCP工具
34个工具在`http://localhost:4242/mcp`提供:
| 分组 | 工具 |
| --- | --- |
| **电路板/项目** | `new_board`,`open_board`,`save_board`,`get_board_state`,`describe_connections` |
| **元件** | `parts_search`,`parts_get`,`datasheet_get` |
| **放置** | `place_component`,`move_component`,`remove_component` |
| **连接** | `connect_pins`,`disconnect_pins`,`create_net_class`,`assign_net_class` |
| **电路板特性** | `set_board_outline`,`add_zone`,`add_keepout`,`add_mounting_hole`,`add_silk_text`,`add_silk_line`,`remove_item` |
| **布线/分析** | `add_track`,`add_via`,`get_ratsnest`,`autoroute`,`unroute`,`widen_tracks`,`run_drc` |
| **历史记录** | `undo`,`redo` |
| **输出** | `export_fab`,`export_step`,`screenshot` |
## 架构
npm工作区monorepo — 所有软件包均为ESM,严格的TypeScript,使用Vitest测试(`packages/*/test/*.test.ts`):
```
packages/
engine/ 纯库:数据模型,几何,网络/ratsnest,区域填充,DRC,操作
parts/ LCSC搜索 + EasyEDA元件封装获取/解析/缓存
fab/ Gerber X2 + Excellon写入器,BOM/CPL写入器,DSN导出 / SES导入
server/ Node:文档主机,操作日志 + 撤销/重做,HTTP + WebSocket,MCP端点,CLI,自动布线运行器
ui/ 浏览器PCB视图(Canvas 2D)带有鼠标编辑工具
```
`server`是中心枢纽:它拥有实时`Doc`(电路板 + 撤销/重做),在`/`处提供`ui`,通过`/ws`流式传输更改,并在`/mcp`处将每个编辑操作公开为MCP工具。Claude Code和浏览器都对同一个电路板进行操作。
## 开发
```bash
npm run build # 每个软件包中的tsc -p .(+ ui的vite构建)
npm test # 每个软件包中的vitest运行
```
通过以下命令练习完整的提示→制造文件管道,适用于真实的(实时LCSC元件,真实Freerouting):
```bash
npx tsx packages/server/scripts/e2e-esp32.ts
```
它构建上述参考电路板,断言DRC清理导出,并验证每个Gerber文件的tracespace。
## 许可证