AutoCAD MCP服务器
用于AutoCAD LT自动化和无头DXF生成的MCP服务器。
两个后端,一个API:
| 后端 | 运行时 | 需要AutoCAD吗? | 屏幕截图 |
|---|---|---|---|
| IPC文件 | Windows Python | 是--AutoCAD LT 2024+(Windows) | Win32打印窗口 |
| ezdxf | 任何平台 | 无(无头) | matplotlib渲染 |
服务器暴露 8个综合工具 (drawing, entity, layer, block, annotation, pid, view, system)通过MCP stdio传输。MCP客户端(Claude Desktop、Claude Code等)通过自然语言请求连接并驱动AutoCAD。
先决条件(文件IPC后端)
- Windows 10/11 (文件IPC后端使用Win32 API进行无焦点窗口消息传递)
- AutoCAD LT 2024或更新版本 --LT 2024为Windows添加了AutoLISP支持。AutoCAD LT for Mac存在,但确实存在 不 支持AutoLISP。
- Python 3.10+ (Windows本机-不是WSL Python)
- 紫外线 包管理器(安装指南)
ezdxf无头后端可在任何平台(Linux、macOS、WSL)上运行,无需安装AutoCAD即可离线生成DXF。
快速开始
1.克隆并安装
git clone https://github.com/puran-water/autocad-mcp.git
cd autocad-mcp
uv sync2.在AutoCAD LT中加载LISP调度程序
打开AutoCAD LT并加载 mcp_dispatch.lsp 使用 应用:
- 类型
APPLOAD在AutoCAD命令行中 - 浏览至
/lisp-code/mcp_dispatch.lsp - 点击 负载
- 您应该看到:
=== MCP Dispatch v3.1 loaded ===和Ready for commands via (c:mcp-dispatch)
提示: 将文件添加到AutoCAD启动套件(在APPLOAD对话框中),使其随每个图形自动加载。
3.配置您的MCP客户端
添加到您的MCP客户端配置中(例如Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"autocad-mcp": {
"command": "C:\\path\\to\\autocad-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "autocad_mcp"],
"env": { "AUTOCAD_MCP_BACKEND": "auto" }
}
}
}要点:
- 这
command必须指向 Windows Python 在项目venv中(不是WSL python)。 AUTOCAD_MCP_BACKEND可以是auto(默认--尝试文件IPC,回退到ezdxf),file_ipc(需要AutoCAD),或ezdxf(仅无头)。
从WSL出发
如果您的MCP客户端在WSL中运行(例如Claude Code),请通过以下方式启动服务器 cmd.exe 因此它作为本机Windows进程运行:
{
"mcpServers": {
"autocad-mcp": {
"type": "stdio",
"command": "cmd.exe",
"args": ["/d", "/s", "/c", "cd /d C:\\path\\to\\autocad-mcp && .venv\\Scripts\\python.exe -m autocad_mcp"],
"env": { "AUTOCAD_MCP_BACKEND": "auto" }
}
}
}4.验证
从您的MCP客户端拨打:
system(operation="status")你应该看看 backend: "file_ipc" 如果AutoCAD正在运行,或 backend: "ezdxf" 无头模式。
工具
drawing --文件/图纸管理
| 操作 | 说明 | 文件IPC | ezdxf |
|---|---|---|---|
create | 重置为干净绘图(全部擦除+清除) | 是 | 是 |
open | 打开现有图形 | 是 | 是(DXF) |
info | 获取实体计数和图层 | 是 | 是 |
save | 保存当前图形(如果给定,则保存到路径) | 是 | 是 |
save_as_dxf | 导出为DXF | 是 | 是 |
plot_pdf | 打印为PDF | 是 | 否 |
purge | 清除未使用的对象 | 是 | 是 |
get_variables | 按名称获取系统变量 | 是 | 是 |
undo | 撤消上次操作 | 是 | 否 |
redo | 恢复上次未完成的操作 | 是 | 否 |
entity --实体CRUD+修改
创建: create_line, create_circle, create_polyline, create_rectangle, create_arc, create_ellipse, create_mtext, create_hatch
阅读: list, count, get
修改: copy, move, rotate, scale, mirror, offset\*, array, fillet\*, chamfer\*, erase
\*offset,fillet,chamfer仅支持文件IPC(ezdxf无头后端不支持)。
layer --图层管理
list, create, set_current, set_properties, freeze, thaw, lock, unlock
block --区块操作
| 操作 | 文件IPC | ezdxf |
|---|---|---|
list | 是 | 是 |
insert | 是 | 是 |
insert_with_attributes | 是 | 是 |
get_attributes | 是 | 是 |
update_attribute | 是 | 是 |
define | 否 | 是 |
annotation --文本、尺寸、引线
create_text, create_dimension_linear, create_dimension_aligned, create_dimension_angular, create_dimension_radius, create_leader
pid --P&ID操作(CTO符号库)
setup_layers, insert_symbol, list_symbols, draw_process_line, connect_equipment, add_flow_arrow, add_equipment_tag, add_line_number, insert_valve, insert_instrument, insert_pump, insert_tank
P&ID符号插入需要 CAD工具在线 (CTO)P&ID符号库安装在 C:\PIDv4-CTO\ezdxf后端具有内置的CTO库支持。对于File IPC后端,一些P&ID操作需要额外的LISP助手——有关设置的详细信息,请参阅wiki中的P&ID部分。view --视口和屏幕截图
| 操作 | 说明 |
|---|---|
zoom_extents | 缩放以显示所有实体 |
zoom_window | 缩放到指定窗口 |
get_screenshot | 将当前AutoCAD视图捕获为PNG |
截图使用 PrintWindow (Win32)用于文件IPC后端——即使在AutoCAD最小化或处于后台时也能工作。ezdxf后端通过matplotlib进行渲染。
system --服务器管理
status, health, get_backend, runtime, init, execute_lisp
execute_lisp运行任意AutoLISP代码(仅限IPC文件)。通过data: {code: "(+ 1 2)"}这将服务器变成一个可扩展的自动化平台——任何有效的AutoLISP表达式都可以执行。
建筑
MCP Client (Claude)
│ stdio (JSON-RPC)
▼
Python MCP Server (autocad_mcp)
│
├── File IPC Backend ──► C:/temp/*.json ──► mcp_dispatch.lsp (AutoCAD LT)
│ PostMessageW(WM_CHAR) to MDIClient — no focus steal
│
└── ezdxf Backend ──► in-memory DXF (headless, no AutoCAD needed)File IPC后端通过以下方式将按键发送到AutoCAD的MDIClient窗口 PostMessageW(WM_CHAR),触发 (c:mcp-dispatch) AutoLISP命令。这种方法确实 不 窃取窗口焦点——在自动化运行时,您可以继续在其他应用程序中工作。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
AUTOCAD_MCP_BACKEND | auto | 后端选择: auto, file_ipc, ezdxf |
AUTOCAD_MCP_IPC_DIR | C:/temp | IPC命令/结果JSON文件的目录(必须在Python和LISP端匹配) |
AUTOCAD_MCP_IPC_TIMEOUT | 10.0 | IPC命令超时(秒)(1-300) |
AUTOCAD_MCP_ONLY_TEXT | false | 禁用截图捕获(仅限文本反馈) |
注: 如果你改变AUTOCAD_MCP_IPC_DIR,您还必须更新*mcp-ipc-dir*变量inmcp_dispatch.lsp为了匹配。
发展
uv sync
uv run pytest tests/ -vAutoCAD LT与AutoLISP的兼容性
AutoLISP已添加到AutoCAD LT中 2024版本(仅限Windows)AutoCAD LT for Mac不支持AutoLISP。
| 支持(LT 2024+Windows) | 不支持 |
|---|---|
.lsp / .fas / .vlx / .dcl | VLIDE(可视化LISP IDE) |
全部 vl-* 效用函数 | vlax-* (ActiveX/COM) |
文件I/O(open, read-line等) | 快捷工具 |
实体访问(entget, entmod等) | 3D操作 |
| 选择集 | Mac上的AutoLISP |
这 mcp_dispatch.lsp 调度员与LT 2024+完全兼容。
v3.1中的新增功能
execute_lisp--通过临时文件模式运行任意AutoLISP代码。将服务器从固定的命令集转换为可扩展的自动化平台。- 撤消/恢复 --通过单步撤消和重做
drawing工具。 - 绘图打开 --打开现有
.dwg以编程方式创建文件(FILEDIA被抑制)。 - 绘图创建 --现在重置当前图形(全部擦除+清除),而不是
_.NEW,保留LISP调度器命名空间。 - 使用路径保存图形 —
save带着一个path参数使用SAVEAS;无路径使用QSAVE。 get_variables修复 --尊敬names参数;返回具有适当类型处理的请求变量。- 折线/引线固定 --通过分号分隔格式正确编码的点数组。
- ESC前缀 --在每次调度之前发送2x ESC,以取消之前超时的过时挂起命令。
- UTF-8/cp1252回退 --处理LISP结果文件中的非ASCII字符(AutoCAD写入Windows-1252)。
- 可配置IPC超时 —
AUTOCAD_MCP_IPC_TIMEOUTenv-var(1-300秒,默认值10)。 - 线程安全后端初始化 —
asyncio.Lock防止并行初始化竞争。
许可证
麻省理工学院

