内容
# klayout-draw-mcp
一个 [MCP](https://modelcontextprotocol.io) 服务器,用于使用 **KLayout** 绘制 **GDS 布局**,通过 AI 助手(如 Claude Code 或 Claude Desktop)生成、编辑和查看布局。
布局几何图形在进程内使用独立的 [`klayout`](https://pypi.org/project/klayout/) Python 模块构建(无需 GUI)。已安装的 KLayout 应用程序仅用于查看或手动编辑。
## 工具
| 工具 | 用途 |
| --- | --- |
| `new_layout(top_cell, dbu)` | 启动新的内存布局(坐标单位为微米) |
| `add_box(layer, x1, y1, x2, y2, datatype)` | 添加矩形 |
| `add_polygon(layer, points, datatype)` | 添加多边形,顶点为 `[x, y]` |
| `add_path(layer, points, width, datatype)` | 添加路径,带有宽度 |
| `add_label(layer, x, y, text, datatype)` | 添加文本标签 |
| `create_cell(name)` / `use_cell(name)` | 创建/选择当前绘图单元格 |
| `place_cell(cell, x, y, orient, nx, ny, dx, dy)` | 放置单元格实例或数组 |
| `add_via(x, y, bottom_layer, top_layer, cut_layer, …)` | 通孔:切割阵列 + 外围金属 |
| `add_wire(layer, points, width)` | 曼哈顿线(自动 L 拐角) |
| `layout_info()` | 检查当前布局(层,边界框,形状计数) |
| `load_gds(path, top_cell?)` | 加载现有的 GDS/OASIS 文件到会话中进行编辑 |
| `inspect_gds(path?)` | 按层计算形状数量,面积和边界框 |
| `drc_check(rules, path?)` | 简单 DRC:间距 / 宽度 / 重叠 / 分离 / 包围 |
| `save_gds(path, open_after)` | 写入 GDS/OASIS;可选地在编辑器中打开 |
| `open_layout(file_path)` | 在 KLayout 中打开文件(查看器) |
| `open_editor(file_path?)` | 以编辑模式打开 KLayout,或空白布局 |
| `run_script(code)` | 使用 `klayout.db` 运行任意 Python 代码(单元格层次结构,数组,布尔运算,DRC,...) |
## 需求
- Python ≥ 3.10
- `klayout` 和 `mcp` Python 包(通过以下步骤安装)
- [KLayout 应用程序](https://www.klayout.de/build.html) — 仅在 `open_layout` / `open_editor` 时需要
## 安装
```bash
uv sync
```
## 在 Claude Code 中注册
```bash
claude mcp add klayout -s user -- "<repo>/.venv/Scripts/python.exe" -m klayout_draw_mcp.server
```
在 macOS/Linux 上使用 `.venv/bin/python`。
## 用法
> "在 1 层绘制一个 5×5 µm 的矩形和一条 2 µm 宽的路径,然后保存到 out.gds 并打开它。"
Claude 调用 `new_layout` → `add_box` / `add_path` → `save_gds(open_after=True)`。
您也可以打开并检查现有的布局:
> "加载 chip.gds,检查 M1 间距 ≥ 0.15 µm 且 OD 从不与 POLY 重叠,并报告违规。"
Claude 调用 `load_gds` → `inspect_gds` → `drc_check([...])`,然后编辑并 `save_gds`。
参见 [编辑和 DRC](https://geniuskey.github.io/klayout-draw-mcp/editing-and-drc/)。
对于基本形状以外的任何操作,`run_script` 公开完整的 `klayout.db` API。
## 示例
`examples/` 目录中的独立脚本。每个脚本使用独立的 `klayout.db` 模块构建布局并写入 GDS:
```bash
uv run python examples/cis_aps_pixel.py out.gds
```
您也可以将脚本的 `build()` 函数体粘贴到 `run_script` 工具中。脚本共享一个层映射(OD 3/0,POLY 6/0,NPLUS 4/0,METAL1 9/0,...)。
| 示例 | 绘制内容 |
| --- | --- |
| `basic_shapes.py` | 四种基本图形:矩形,路径,多边形,标签 |
| `nmos_transistor.py` | 一个 NMOS 管(有源区,栅极,多晶硅,接触,M1 源极/栅极/漏极) |
| `cmos_inverter.py` | 一个 CMOS 逆变器:PMOS 在 NMOS 上,共享栅极,Vdd/Vss 轨 |
| `cis_aps_pixel.py` | 一个 1 µm 4T CMOS 图像传感器像素,以 2×2 数组排列 |
## 布局和布线技能
`skills/klayout-pnr/` 目录中的布局和布线配方 — 行放置,电源轨,障碍感知迷宫(Lee)路由器 — 以及助手的 `SKILL.md` 工作流程指南。
复制它到您的技能目录中,以便自动发现:
```bash
cp -r skills/klayout-pnr ~/.claude/skills/
```
## 文档
完整的文档(入门指南,示例,编辑/DRC,布局和布线)位于
**https://geniuskey.github.io/klayout-draw-mcp/**。
## 注意
`run_script` 在本地进程中执行任意 Python 代码。仅运行您信任的脚本。