Metadata-Version: 2.5
Name: autocad-mcp
Version: 1.1.2
Summary: AutoCAD-mcp 连接器：通过 MCP 协议用自然语言/AI 驱动本机 AutoCAD 完成 2D 制图、图框、标题栏、BOM、球标与标注。
Project-URL: Homepage, https://github.com/liqi82/autocad-mcp
Project-URL: Repository, https://github.com/liqi82/autocad-mcp
Author: Liqi（liqi8209@qq.com）
License: MIT
License-File: LICENSE
Keywords: autocad,automation,cad,dwg,mcp,workbuddy
Requires-Python: >=3.10
Requires-Dist: mcp<2,>=1.2
Requires-Dist: pywin32>=306
Description-Content-Type: text/markdown

# AutoCAD-mcp

> 用自然语言 / AI 驱动你电脑上正在运行的 **AutoCAD** 完成 2D 制图自动化。  
> 通过 MCP 协议把 AutoCAD 的绘图、标注、图层/块、机械图框/标题栏/BOM/球标等能力暴露给 WorkBuddy 及任意 MCP 客户端；支持 AutoCAD 2014 及兼容版本。

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org)
![Release](https://img.shields.io/github/v/release/liqi82/autocad-mcp)
[![PyPI](https://img.shields.io/pypi/v/autocad-mcp.svg)](https://pypi.org/project/autocad-mcp/)

---

## 它能做什么

通过 Windows COM(ActiveX) 连接本机 AutoCAD，把以下能力以 **MCP 工具**暴露给 WorkBuddy / 任意 MCP 客户端：

- 🖊️ **绘制**：直线、圆、多段线、矩形、单行/多行文字
- 📐 **标注**：线性、对齐、半径、直径
- 🗂️ **图层 / 块 / 样式管理**：新建图层、切换当前层、块定义与插入、中文文字样式（宋体，不乱码）
- 📐 **机械制图**：A3 图框、GB 标准中文标题栏、BOM 明细表、球标
- 🔍 **查询 / 清理**：列出实体、按图层擦除、按 Handle 平移
- ✅ **54 条 2D 命令 COM 路由已实图核实**：明确哪些命令走纯 COM、哪些必须走 SendCommand，避免卡死

## 能力清单（MCP 工具）

| 能力 | 对应工具 |
|---|---|
| 连接 / 环境探测 | `connect` / `capabilities` / `list_documents` |
| 绘制 线/圆/多段线/矩形/文字 | `draw_line` / `draw_circle` / `draw_polyline` / `draw_rect` / `add_text` / `add_mtext` |
| 查询图面 | `query_entities` |
| 标注 线性/对齐/半径/直径 | `dim_linear` / `dim_aligned` / `dim_radial` / `dim_diameter` |
| 图层 / 块 / 样式 | `ensure_layer` / `set_current_layer` / `ensure_block` / `insert_block` |
| 机械图框 / 标题栏 / BOM / 球标 | `a3_frame` / `title_block` / `bom_grid` / `balloon` |
| 清理 / 变换 | `erase_layer` / `move_entity` |

> 机械图框、GB 标准标题栏、BOM 明细表、球标等均以几何 + 文字直接生成，开箱即用、无需依赖任何 CAD 私有向导。

---

## 54 条 2D 命令 COM 路由（实图核实）

本 MCP 底层已通过实图逐条核实 54 个 AutoCAD 2D 命令的可靠驱动路径，结果汇总在 `SKILL.md` 与 `autocad-skill-kit`（如本地已克隆）中。

| 路由类型 | 数量 | 典型命令 |
|---|---|---|
| 纯 COM 可靠 | 33 | LINE/CIRCLE/ARC/PLINE/POLYGON/RECTANG/HATCH/REGION/BLOCK/INSERT/MOVE/ROTATE/SCALE/MIRROR/OFFSET/ARRAY/ERASE/COPY/EXPLODE/LAYER/ZOOM/REGEN/QSAVE... |
| COM 几何复刻 | 1 | REVCLOUD（原生 `_REVCLOUD` SendCommand 会卡死，用闭合多段线 + 向外 bulge 复刻） |
| 必须走 SendCommand | 20 | TRIM/EXTEND/BREAK/JOIN/CHAMFER/FILLET/BOUNDARY/DIMLINEAR/DIMRADIUS/DIMCENTER/QDIM/PAN/DIST/AREA/LIST/PROPERTIES... |

**判定口诀**：凡有 `ModelSpace.AddXxx` 或实体方法 → 走纯 COM；只有交互/查询类才走 SendCommand，且必须程序化预选集，否则 CAD 卡死。

---

## 环境要求

- **Windows**（COM/ActiveX 仅 Windows 可用）
- **AutoCAD 已安装并打开至少一张 DWG**（2014 及兼容版本；理论上支持 R2010+ 的 ActiveX 接口）
- 运行环境：首次启动会自动拉取 `mcp`(v1) + `pywin32`

> ⚠️ 本连接器仅支持 **AutoCAD**，需要本机已安装并运行 AutoCAD（依赖 Windows COM/ActiveX）。

---

## 安装与运行

### 方式一：uvx / pipx（推荐，发布后）

```bash
uvx autocad-mcp            # 自动下载并启动 MCP 服务（stdio）
# 或
pipx run autocad-mcp
```

### 方式二：从源码

```bash
git clone https://github.com/liqi82/autocad-mcp.git
cd autocad-mcp
pip install -e .
autocad-mcp                # 或 python -m autocad_mcp.server
```

本地开发时也可直接进入 `src` 目录用托管 Python 运行：

```bash
cd autocad-mcp/src
python -m autocad_mcp.server
```

---

## 接入 WorkBuddy（连接器）

1. 把下面内容合并进 WorkBuddy 的 `~/.workbuddy/mcp.json` 的 `mcpServers`：

   ```json
   {
     "mcpServers": {
       "autocad-2d": {
         "command": "uvx",
         "args": ["autocad-mcp"],
         "env": { "PYTHONUTF8": "1" }
       }
     }
   }
   ```

2. 在连接器管理页面对 **「autocad-2d」** 点击 **信任 / 启用**。
3. 确认 AutoCAD 已打开一张 DWG。
4. 在对话里直接说，例如：*"在 Drawing2.dwg 画一个直径 300 的圆"*、*"插入 A3 图框并填写标题栏"*。

> 本地未发布时，可把 `command` 改为你的 Python 解释器、`args` 改为 `["-m","autocad_mcp.server"]`、`cwd` 指向 `src` 目录。

---

## 使用示例（MCP 工具直接调用）

```text
connect()                                  → 连接当前活动图纸，返回能力信息
a3_frame(landscape=true)                   → 插入 A3 横式外框
title_block(fields={"图名":"总布置图","图号":"SC-001","比例":"1:200"})
draw_circle(cx=210, cy=148.5, radius=150)  → 直径 300 的圆
bom_grid(origin_x=20, origin_y=360,
         headers=["序号","名称","数量","材料"],
         rows=[["1","船体","1","钢"],["2","电机","2","—"]],
         col_widths=[20,80,30,40])
balloon(x=120, y=200, number="1", leader_x=160, leader_y=230)
dim_linear(x1=0,y1=0,x2=420,y2=0,tx=210,ty=-15)   → 水平尺寸标注
query_entities()                            → 列出模型空间所有实体
erase_layer("HW_TEST_TMP")                  → 清理临时图层
```

---

## 快速演示（一键跑通全套能力）

仓库内置一个端到端演示脚本 `examples/demo_showcase.py`，它通过**真实 MCP stdio 服务器**在目标图纸上画出一张带标注的机械示例图（矩形轮廓 + 孔 + 线性标注 + 球标 + BOM 明细表 + 文字），全部画在独立图层 `HW_DEMO`，便于一键清理。

```bash
# 1) 先装好连接器（见上文「方式二：从源码」）
pip install -e .

# 2) 打开 AutoCAD 与目标图纸（默认 Drawing2.dwg，可在脚本顶部的 TARGET_DOC 改）
# 3) 运行演示（用托管 Python）
python examples/demo_showcase.py
```

演示会依次调用 `connect → ensure_layer → draw_rect → draw_circle → dim_linear → balloon → bom_grid → add_text`，并输出每个工具的返回值（Handle）。效果等价于你亲口说："在 Drawing2 画一个矩形零件，开个孔，标个尺寸，加球标和 BOM"。

> 想看真实渲染，直接用 AutoCAD 打开该图纸、切到 `HW_DEMO` 图层即可；清理时删除该图层内容或调用 `erase_layer(layer="HW_DEMO")`。

---

## 局限与注意事项

- **仅 Windows + AutoCAD**：依赖 COM/ActiveX，无法在 macOS/Linux 或非 AutoCAD 环境使用。
- **需 AutoCAD 运行中**：服务启动后通过 `GetActiveObject` 连接已运行的 AutoCAD 实例；未启动会报错。
- **单实例**：多开 AutoCAD 时可能连到非预期窗口，建议用 `connect(doc_name=...)` 显式指定。
- **中文**：文字默认使用 `HW_CN`（宋体 TTF）样式以避免方框乱码。
- **安全**：删除实体、保存、关闭文档等写操作请先确认；本服务只新增实体、不自动保存，便于 Ctrl+Z 撤销。

## FAQ

**Q：需要联网吗？**  
A：不需要。连接器完全在本机通过 COM 与已运行的 AutoCAD 通信，不上传你的图纸。

**Q：支持 AutoCAD 哪个版本？**  
A：ActiveX 接口自 R2010 起基本稳定，已在 AutoCAD 2014（19.1s 中文版）验证；更高版本通常也可用。

**Q：能画 3D 吗？**  
A：当前聚焦 2D 制图自动化。3D 可后续扩展。

**Q：坐标单位是什么？**  
A：当前图纸的单位（通常毫米）。角度为弧度。

---

## 发布与分享

本项目设计为可发布、可分享：

- **GitHub**：`git tag v1.1.0` 后发布 Release；`pyproject.toml` 已配置 `autocad-mcp` 控制台入口，可 `uvx autocad-mcp` 直接使用。
- **WorkBuddy 技能市场**：可以搜索本技能并下载使用。
- **私有分发**：直接把整个文件夹发给同事，`pip install -e .` 后即可用。

欢迎提 Issue / PR，一起把 AutoCAD 自动化能力补全。

## License

[MIT](LICENSE) © 2026 John Zhang, ZWCAD-2D contributors, 李琦 (liqi8209@qq.com)

_author：李琦/liqi(Email: liqi8209@qq.com)_
