Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@atlisp/mcp

Package Overview
Dependencies
Maintainers
1
Versions
79
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlisp/mcp - npm Package Compare versions

Comparing version
1.8.10
to
1.8.11
+1
-1
package.json
{
"name": "@atlisp/mcp",
"version": "1.8.10",
"version": "1.8.11",
"description": "MCP Server for @lisp on CAD,support AutoCAD/GstarCAD/ZWCAD/BricsCAD or CAD platform compatible with AutoLISP",

@@ -5,0 +5,0 @@ "type": "module",

+623
-287
# @lisp MCP Server
MCP (Model Context Protocol) Server for @lisp on CAD - 为 CAD 环境提供 @lisp 包管理服务的 MCP 服务器,同时为 AI AGENT 操控 CAD 提供调用工具和通道。
MCP (Model Context Protocol) Server for @lisp on CAD — 为 CAD 环境提供 @lisp 包管理服务的 MCP 服务器,同时为 AI Agent 操控 CAD 提供 **220+ 个调用工具**和通道。
支持 **AutoCAD / ZWCAD / GStarCAD / BricsCAD**,通过 COM 互操作与 CAD 通信。
---
## 目录
- [功能特性](#功能特性)
- [快速安装](#快速安装)
- [配置 AI Agent](#配置-ai-agent)
- [启动服务](#启动服务)
- [连接 CAD](#连接-cad)
- [工具列表](#工具列表)
- [MCP 资源](#mcp-资源)
- [MCP Prompts](#mcp-prompts)
- [HTTP API 端点](#http-api-端点)
- [环境变量](#环境变量)
- [命令行参数](#命令行参数)
- [配置文件](#配置文件)
- [工作原理](#工作原理)
- [Docker](#docker)
- [开发指南](#开发指南)
- [故障排除](#故障排除)
- [许可证](#许可证)
---
## 功能特性
- 连接 AutoCAD/ZWCAD/GStarCAD/BricsCAD
- 执行 AutoLISP 代码,支持绘图、查询、标注
- AI Agent 可通过 MCP 协议控制 CAD 绘图
- 管理 @lisp 包(列出、搜索、安装)
- CAD 未运行自动启动
- 实体/图层/块 CRUD 操作
- DWG 文件操作(打开/保存/导出)
- MCP 资源订阅推送
- MCP 根目录支持
- **连接多平台 CAD** — AutoCAD / ZWCAD / GStarCAD / BricsCAD
- **执行 AutoLISP** — 执行 LISP 代码并获取结果
- **AI Agent 控制 CAD** — 220+ MCP 工具,涵盖绘图、编辑、查询、管理
- **包管理** — 列出、搜索、安装 @lisp 包
- **批量操作** — 批量复制/移动/旋转/缩放/镜像/偏移/改名/改色/改图层
- **3D 建模** — 创建 Box/Sphere/Cylinder/Cone/Torus/Wedge,布尔运算,拉伸/旋转
- **图纸集管理** — 创建/发布/归档/比较/打包图纸集
- **动态块** — 获取/设置参数、可见性状态
- **几何约束与标注约束** — 添加/删除/列出约束
- **外部参照** — 附着/拆离/绑定/裁剪/路径管理/批量相对化
- **PDF/DGN/DWF 底图** — 附着/拆离/重载/批量附着
- **扩展数据 (Xdata)** — 读写/复制/搜索/导入/导出
- **管道 (Pipeline)** — 编排多步工具调用链
- **触发器 (Watch)** — 注册 CAD 变更触发器,等待条件满足
- **Webhook** — 事件驱动回调(工具执行/包安装/CAD 连接等)
- **REPL** — 交互式 Lisp 执行会话
- **流式读取** — 分页流式读取实体/文字/块参照
- **外部数据** — 查询/导入/导出 CSV/JSON 数据源
- **审计日志** — 查询和统计工具调用历史
- **CAD 连接池** — 发现/切换/健康检查多 CAD 实例
- **沙箱** — 验证 LISP 代码安全性
- **资源订阅** — 实时推送 CAD/DWG/包变更
- **LLM Sampling** — 通过配置的 LLM 提供采样能力
- **Prometheus 指标** — 导出 /metrics 端点
- **SSL/TLS** — 支持 HTTPS 加密通信
- **API Key 认证与速率限制**
- **配置热重载** — 配置文件变更自动加载
- **多种传输模式** — HTTP / SSE / stdio / WebSocket
---
## 一、安装
## 快速安装

@@ -28,9 +73,15 @@ ### Windows (PowerShell)

安装脚本会自动:
- 安装 Node.js(如未安装)
- 安装 Node.js(如未安装,支持 winget/choco/scoop/MSI)
- 全局安装 `@atlisp/mcp` 包
- 创建命令 `atlisp-mcp`
- 注册命令 `atlisp-mcp`
### 手动安装 (npm)
```bash
npm install -g @atlisp/mcp
```
### 验证安装
```powershell
```bash
atlisp-mcp --version

@@ -41,5 +92,5 @@ ```

## 二、配置 AI Agent (WorkBuddy / Claude Desktop)
## 配置 AI Agent
### WorkBuddy 配置
### WorkBuddy

@@ -58,3 +109,3 @@ 在 `~/.workbuddy/.mcp.json` 中添加:

### Claude Desktop 配置
### Claude Desktop

@@ -76,3 +127,3 @@ 在 `~/AppData/Roaming/Claude/claude_desktop_config.json` 中添加:

### 其他 AI Agent (Cline / Cursor / Windsurf)
### Cline / Cursor / Windsurf

@@ -93,5 +144,20 @@ ```json

### opencode / Goose / 其他支持 stdio 的 Agent
```json
{
"mcpServers": {
"atlisp-mcp": {
"command": "atlisp-mcp",
"env": {
"TRANSPORT": "stdio"
}
}
}
}
```
---
## 三、启动服务
## 启动服务

@@ -104,3 +170,3 @@ ### HTTP 模式(默认,端口 8110)

服务启动后输出:
输出:
```

@@ -110,10 +176,22 @@ @lisp MCP Server 启动 - http://0.0.0.0:8110 - Streamable HTTP

### stdio 模式(AI Agent 直接调用)
### stdio 模式
```bash
atlisp-mcp
# 环境变量
TRANSPORT=stdio
TRANSPORT=stdio atlisp-mcp
```
### WebSocket 模式
```bash
TRANSPORT=ws atlisp-mcp
# 或
atlisp-mcp --ws
```
### 指定端口/主机
```bash
atlisp-mcp --port 9000 --host 127.0.0.1
```
### 健康检查

@@ -127,14 +205,19 @@

### HTTP 端点
### 查看指标
| 端点 | 方法 | 说明 |
|------|------|------|
| `/health` | GET | 健康检查 |
| `/sse` | GET | SSE 长连接端点(需 ENABLE_SSE=true) |
| `/mcp/sse` | GET/POST | SSE MCP 端点(需 ENABLE_SSE=true) |
| `/mcp` | POST | MCP JSON-RPC 端点(主要接口) |
```bash
curl http://localhost:8110/metrics
```
### 调试面板
打开浏览器访问 `http://localhost:8110/debug`
### 工具游乐场
打开浏览器访问 `http://localhost:8110/playground`
---
## 四、连接 CAD
## 连接 CAD

@@ -144,9 +227,7 @@ ### 前置条件

- Windows 系统
- CAD 软件已安装(AutoCAD / ZWCAD / GStarCAD / BricsCAD)
- CAD 已启动(或配置为自动启动)
- CAD 软件已安装
- CAD 已启动或允许自动启动
### 连接方式
### 使用 MCP 工具连接
使用 MCP 工具 `connect_cad` 连接 CAD:
```json

@@ -159,2 +240,13 @@ {

或指定平台:
```json
{
"name": "connect_cad",
"arguments": {
"platform": "AutoCAD"
}
}
```
**自动行为**:

@@ -164,338 +256,582 @@ - 如果 CAD 已运行,连接现有实例

连接成功返回: `已连接到 AutoCAD 2021`
连接成功返回类似: `已连接到 AutoCAD 2025`
---
## 五、绘图示例
## 工具列表 (220+)
### 1. 画直线
### 系统与 CAD 连接 (11)
```json
{
"name": "eval_lisp",
"arguments": {
"code": "(command \"_.LINE\" \"0,0\" \"100,100\" \"\")"
}
}
```
| 工具 | 说明 | 参数 |
|------|------|------|
| `connect_cad` | 连接 CAD | `platform` (可选) |
| `eval_lisp` | 执行 LISP 代码(无返回值) | `code` (必填) |
| `eval_lisp_with_result` | 执行 LISP 并返回结果 | `code` (必填), `encoding` (可选) |
| `get_cad_info` | 获取 CAD 信息 | — |
| `get_platform_info` | 获取平台信息 | — |
| `at_command` | 执行 @lisp 命令 | `command` (必填) |
| `new_document` | 新建空白文档 | — |
| `bring_to_front` | 切换 CAD 到前台 | — |
| `install_atlisp` | 安装 @lisp | — |
| `init_atlisp` | 初始化 @lisp 环境 | — |
| `get_system_status` | 获取系统诊断信息 | — |
### 2. 画矩形
### LISP 执行
```json
{
"name": "eval_lisp",
"arguments": {
"code": "(command \"_.RECTANG\" \"0,0\" \"100,100\")"
}
}
```
| 工具 | 说明 |
|------|------|
| `eval_lisp` | 执行 LISP 代码,不返回结果 |
| `eval_lisp_with_result` | 执行 LISP 代码并返回结果,支持 `encoding: utf-8/gbk/gb2312/gb18030` |
| `lisp_repl` | REPL 会话执行,自动追踪变量和历史 |
| `lisp_repl_history` | 获取 REPL 会话历史 |
| `lisp_repl_list` | 列出活跃 REPL 会话 |
| `lisp_repl_close` | 关闭 REPL 会话 |
### 3. 画圆
### 包管理 (3)
```json
{
"name": "eval_lisp",
"arguments": {
"code": "(command \"_.CIRCLE\" \"50,50\" \"25\")"
}
}
```
| 工具 | 说明 | 参数 |
|------|------|------|
| `list_packages` | 列出已安装包 | — |
| `search_packages` | 搜索包 | `query` (必填) |
| `install_package` | 安装包到 CAD | `packageName` (必填) |
### 4. 写文字
### 信息与函数 (5)
```json
{
"name": "eval_lisp",
"arguments": {
"code": "(entmake (list (cons 0 \"TEXT\") (cons 10 (list 0 0 0)) (cons 40 5) (cons 1 \"标题\")))"
}
}
```
| 工具 | 说明 |
|------|------|
| `get_function_usage` | 获取 @lisp 函数用法 |
| `list_symbols` | 列出所有符号(函数/变量) |
| `import_funlib` | 导入函数库数据到 AI Agent |
| `list_prompts` | 列出提示模板 |
| `get_prompt` | 获取指定提示模板 |
### 5. 获取查询结果
### 实体操作 (4)
```json
{
"name": "eval_lisp_with_result",
"arguments": {
"code": "(getvar \"acadver\")"
}
}
```
| 工具 | 说明 |
|------|------|
| `get_entity` | 获取实体属性(句柄/类型/图层/颜色等) |
| `set_entity` | 设置实体属性(layer/color/linetype/elevation) |
| `delete_entity` | 删除实体 |
| `select_entities` | 按条件选择实体(type/layer 过滤) |
| `get_entity_info` | 获取实体详细信息 |
返回 CAD 版本号,如 "AC1027"
### 图层操作 (4)
### 6. 统计图形数量
| 工具 | 说明 |
|------|------|
| `create_layer` | 创建图层 |
| `delete_layer` | 删除图层 |
| `set_layer` | 设置图层属性(color/linetype/freeze/thaw/lock/unlock) |
| `set_current_layer` | 设置当前图层 |
```json
{
"name": "eval_lisp_with_result",
"arguments": {
"code": "(sslength (ssget \"_X\"))"
}
}
```
### 块操作 (6)
### 7. 切换 CAD 到前台
| 工具 | 说明 |
|------|------|
| `create_block` | 创建块定义 |
| `insert_block` | 插入块参照 |
| `get_blocks` | 获取所有块定义 |
| `explode_block` | 炸开块参照 |
| `batch_get_block_attributes` | 批量获取块属性 |
| `batch_set_block_attributes` | 批量设置块属性 |
当 CAD 在后台运行时,唤醒到前台:
### 动态块与参数化 (6)
```json
{
"name": "bring_to_front",
"arguments": {}
}
```
| 工具 | 说明 |
|------|------|
| `get_dynamic_block_properties` | 获取动态块所有属性 |
| `set_dynamic_block_property` | 设置动态块属性值 |
| `get_block_parameters` | 获取块参数值 |
| `set_block_parameter` | 设置块参数值 |
| `list_visibility_states` | 列出可见性状态 |
| `set_visibility_state` | 切换可见性状态 |
---
### 文件/DWG 操作 (5)
## 六、可用工具列表 (35 个)
| 工具 | 说明 |
|------|------|
| `open_dwg` | 打开 DWG 文件 |
| `save_dwg` | 保存图形 |
| `export_pdf` | 导出 PDF |
| `export_dxf` | 导出 DXF |
| `export_dwf` | 导出 DWF |
| `close_dwg` | 关闭图形 |
| `import_dxf` | 导入 DXF 文件 |
| `import_dgn` | 导入 DGN 文件 |
| `export_dgn` | 导出 DGN 文件 |
### CAD 连接
### 标注与填充 (7)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `connect_cad` | 连接到 CAD | `platform`: AutoCAD/ZWCAD/GStarCAD/BricsCAD |
| `get_cad_info` | 获取 CAD 信息 | 无 |
| `bring_to_front` | 切换 CAD 到前台 | 无 |
| `new_document` | 新建空白文档 | 无 |
| `get_system_status` | 获取系统诊断信息 | 无 |
| 工具 | 说明 |
|------|------|
| `create_dimension` | 创建标注(ALIGNED/LINEAR/ORDINATE/RADIAL/DIAMETER/ANGULAR) |
| `get_dimension` | 获取标注值 |
| `create_hatch` | 创建图案填充 |
| `set_hatch` | 设置填充属性 |
| `get_block_attributes` | 获取块属性值 |
| `set_block_attribute` | 设置块属性值 |
| `dimension_style` | 创建和管理标注样式 |
### LISP 执行
### 样式管理 (11)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `eval_lisp` | 执行 LISP 代码(无返回值) | `code`: LISP 代码 |
| `eval_lisp_with_result` | 执行 LISP 并返回结果 | `code`, `encoding`: utf-8/gbk |
| `at_command` | 执行 @lisp 命令 | `command`: 命令 |
| 工具 | 说明 |
|------|------|
| `create_dimension_style` | 创建标注样式 |
| `set_dimstyle_var` | 设置标注样式变量 |
| `list_dimension_styles` | 列出所有标注样式 |
| `create_text_style` | 创建文字样式 |
| `list_text_styles` | 列出所有文字样式 |
| `create_linetype` | 创建线型 |
| `load_linetype` | 加载线型文件 |
| `list_linetypes` | 列出所有线型 |
| `create_mleader_style` | 创建多重引线样式 |
| `set_mleader_style_prop` | 设置多重引线样式属性 |
| `list_mleader_styles` | 列出多重引线样式 |
### 包管理
### 视图与缩放 (5)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `list_packages` | 列出已安装的包 | 无 |
| `search_packages` | 搜索包 | `query`: 关键词 |
| `install_package` | 安装包 | `packageName`: 包名 |
| 工具 | 说明 |
|------|------|
| `zoom_extents` | 缩放到图形范围 |
| `zoom_window` | 缩放到窗口 |
| `create_named_view` | 创建命名视图 |
| `restore_named_view` | 恢复命名视图 |
| `list_named_views` | 列出所有命名视图 |
### 实体操作
### UCS 与布局 (11)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `get_entity` | 获取实体属性 | `handle`: 句柄 |
| `set_entity` | 设置实体属性 | `handle`, `property`: layer/color/linetype/elevation, `value` |
| `delete_entity` | 删除实体 | `handle`: 句柄 |
| `select_entities` | 按条件选择实体 | `filter`: {type, layer} |
| 工具 | 说明 |
|------|------|
| `create_ucs` | 创建 UCS |
| `set_ucs` | 切换到 UCS |
| `list_ucs` | 列出所有 UCS |
| `delete_ucs` | 删除 UCS |
| `get_current_ucs` | 获取当前 UCS 名称 |
| `create_layout` | 创建布局 |
| `set_layout` | 切换布局 |
| `list_layouts` | 列出所有布局 |
| `delete_layout` | 删除布局 |
| `get_current_layout` | 获取当前布局 |
| `rename_layout` | 重命名布局 |
### 图层操作
### 查询与测量 (5)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `create_layer` | 创建图层 | `name`, `color`: 1-255, `linetype`: 线型名 |
| `delete_layer` | 删除图层 | `name` |
| `set_layer` | 设置图层属性 | `name`, `property`: color/linetype/freeze/thaw/lock/unlock |
| `set_current_layer` | 设置当前图层 | `name` |
| 工具 | 说明 |
|------|------|
| `measure_distance` | 测量两点距离 |
| `measure_area` | 测量多边形面积 |
| `get_3d_solid_info` | 获取 3D 实体信息 |
| `list_groups` | 列出所有组 |
| `get_group_entities` | 获取组内实体 |
### 块操作
### 组操作 (4)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `create_block` | 创建块定义 | `name`, `entities`: 实体代码 |
| `insert_block` | 插入块 | `blockName`, `point`: x,y, `scale`: 1, `rotation`: 0 |
| `get_blocks` | 获取所有块定义 | 无 |
| `explode_block` | 炸开块 | `handle`: 句柄 |
| 工具 | 说明 |
|------|------|
| `create_group` | 创建组 |
| `delete_group` | 删除组 |
| `list_groups` | 列出所有组 |
| `get_group_entities` | 获取组内实体句柄 |
### 文件操作
### 批量操作 (14)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `open_dwg` | 打开 DWG 文件 | `filePath`: 完整路径 |
| `save_dwg` | 保存图形 | `filePath`: 另存路径(可选) |
| `export_pdf` | 导出 PDF | `outputPath`, `layout`: Model/Layout1 |
| `close_dwg` | 关闭图形 | `save`: true/false |
| 工具 | 说明 |
|------|------|
| `batch_copy` | 批量复制实体到指定偏移 |
| `batch_move` | 批量移动到指定图层 |
| `batch_delete` | 批量删除实体 |
| `batch_rename` | 批量重命名实体 |
| `batch_set_color` | 批量设置颜色 |
| `batch_set_layer` | 批量设置图层 |
| `batch_set_linetype` | 批量设置线型 |
| `batch_explode` | 批量炸开 |
| `batch_mirror` | 批量镜像 |
| `batch_offset` | 批量偏移 |
| `batch_rotate` | 批量旋转 |
| `batch_scale` | 批量缩放 |
| `batch_match_properties` | 批量匹配属性(格式刷) |
| `batch_create_group` | 批量创建组 |
| `batch_add_to_group` | 批量添加到组 |
### @lisp 系统
### 3D 建模 (20)
| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `install_atlisp` | 安装 @lisp | 无 |
| `init_atlisp` | 初始化 @lisp 环境 | 无 |
| `get_function_usage` | 获取函数用法 | `name`: 函数名, `package`: 包名 |
| `list_symbols` | 列出所有符号 | `package`: 包名(可选) |
| `import_funlib` | 导入函数库到 AI | `format`: json/list |
| `get_platform_info` | 获取平台信息 | 无 |
| `list_prompts` | 列出提示模板 | 无 |
| `get_prompt` | 获取提示模板 | `name`, `args`: 参数 |
| 工具 | 说明 |
|------|------|
| `create_box` | 创建立方体 |
| `create_sphere` | 创建球体 |
| `create_cylinder` | 创建圆柱体 |
| `create_cone` | 创建圆锥体 |
| `create_torus` | 创建圆环体 |
| `create_wedge` | 创建楔体 |
| `create_3d_face` | 创建 3D 面 |
| `create_3d_polyline` | 创建 3D 多段线 |
| `create_mesh` | 创建网格 |
| `extrude_solid` | 拉伸成实体 |
| `revolve_solid` | 旋转成实体 |
| `create_region` | 创建面域 |
| `boolean_union` | 并集 |
| `boolean_subtract` | 差集 |
| `boolean_intersect` | 交集 |
| `slice_solid` | 剖切实体 |
| `create_loft_surface` | 创建放样曲面 |
| `thicken_surface` | 曲面加厚 |
| `offset_surface` | 曲面偏移 |
| `convert_to_cloud_line` | 转为修订云线 |
| `create_cloud_line` | 创建修订云线 |
### 约束 (4)
| 工具 | 说明 |
|------|------|
| `add_geom_constraint` | 添加几何约束(平行/垂直/相切/共线/同心/固定/对称/相等等) |
| `add_dim_constraint` | 添加标注约束(水平/垂直/对齐/半径/直径/角度) |
| `del_constraint` | 删除实体上所有约束 |
| `list_constraints` | 列出所有约束 |
### 扩展数据 Xdata (9)
| 工具 | 说明 |
|------|------|
| `get_xdata` | 获取实体扩展数据 |
| `set_xdata` | 设置实体扩展数据 |
| `delete_xdata` | 删除扩展数据 |
| `list_xdata_apps` | 列出所有注册的扩展数据应用名 |
| `get_all_entity_xdata` | 获取所有扩展数据 |
| `copy_xdata` | 复制扩展数据到另一实体 |
| `search_by_xdata` | 按扩展数据搜索实体 |
| `export_xdata_to_file` | 导出扩展数据到 JSON |
| `import_xdata_from_file` | 从 JSON 导入扩展数据 |
### PDF/底图 (14)
| 工具 | 说明 |
|------|------|
| `attach_pdf` | 附着 PDF 底图 |
| `detach_pdf` | 拆离 PDF 底图 |
| `reload_pdf` | 重载 PDF 底图 |
| `list_attached_pdfs` | 列出已附着的 PDF |
| `get_pdf_info` | 获取 PDF 底图信息 |
| `batch_attach_pdfs` | 批量附着 PDF |
| `create_dgn_underlay` | 附着 DGN 底图 |
| `create_dwf_underlay` | 附着 DWF 底图 |
| `create_hyperlink` | 创建超链接 |
| `remove_hyperlink` | 删除超链接 |
### 外部参照 Xref (14)
| 工具 | 说明 |
|------|------|
| `attach_xref` | 附着外部参照 |
| `detach_xref` | 拆离外部参照 |
| `reload_xref` | 重载外部参照 |
| `unload_xref` | 卸载外部参照 |
| `list_xrefs` | 列出所有外部参照 |
| `bind_xref` | 绑定外部参照 |
| `clip_xref` | 裁剪外部参照 |
| `path_xref` | 修改外部参照路径 |
| `xref_notifications` | 配置/查询外部参照变更通知 |
| `xref_compare` | 比较外部参照 |
| `xref_convert_to_block` | 外部参照转为块 |
| `xref_demote` | 嵌套参照降级 |
| `xref_path_relative` | 批量转换路径为相对路径 |
### 图纸集 (18)
| 工具 | 说明 |
|------|------|
| `create_sheet_set` | 创建图纸集 |
| `open_sheet_set` | 打开图纸集文件 |
| `list_sheet_sets` | 列出所有图纸集 |
| `add_sheet` | 添加图纸 |
| `list_sheets` | 列出图纸 |
| `delete_sheet` | 删除图纸 |
| `reorder_sheet` | 重新排序图纸 |
| `create_subset` | 创建子集 |
| `list_subsets` | 列出子集 |
| `set_sheet_property` | 设置图纸属性 |
| `get_sheet_set_property` | 获取图纸集属性 |
| `publish_sheet_set` | 发布图纸集 |
| `create_sheet_set_archive` | 归档图纸集 |
| `sheet_set_publish_options` | 发布选项配置 |
| `sheet_set_transmit` | eTransmit 打包 |
| `sheet_set_compare` | 比较图纸集 |
| `sheet_list_views` | 列出图纸视图 |
| `sheet_import_layouts` | 从 DWG 导入布局 |
### 打印 (8)
| 工具 | 说明 |
|------|------|
| `plot_to_pdf` | 打印到 PDF |
| `plot_to_printer` | 打印到打印机 |
| `save_pdf_layout` | 布局另存为 PDF |
| `publish_layouts` | 批量发布布局到 PDF |
| `batch_plot_wizard` | 批量打印向导 |
| `plot_device_management` | 打印设备管理 |
| `plot_log` | 查询打印历史 |
| `plot_from_file_list` | 从文件列表批量打印 |
### 管道 Pipeline (5)
| 工具 | 说明 |
|------|------|
| `pipeline_execute` | 执行管道链(多步工具顺序执行) |
| `pipeline_save` | 保存管道定义 |
| `pipeline_list` | 列出已保存管道 |
| `pipeline_run` | 运行已保存管道 |
| `pipeline_delete` | 删除管道 |
### 触发器 Watch (5)
| 工具 | 说明 |
|------|------|
| `watch_register` | 注册 CAD 变更触发器 |
| `watch_remove` | 移除触发器 |
| `watch_list` | 列出所有触发器 |
| `watch_wait` | 等待触发器触发 |
| `watch_create_and_wait` | 注册并等待(合并操作) |
### Webhook (4)
| 工具 | 说明 |
|------|------|
| `webhook_register` | 注册 webhook |
| `webhook_list` | 列出所有 webhook |
| `webhook_remove` | 移除 webhook |
| `webhook_log` | 获取 webhook 日志 |
### 流式读取 (4)
| 工具 | 说明 |
|------|------|
| `stream_entities` | 分页流式读取实体数据 |
| `stream_text` | 分页流式读取文字内容 |
| `stream_block_refs` | 分页流式读取块参照 |
| `combine_text` | 碎片文本按位置组合为完整段落 |
### 外部数据 (4)
| 工具 | 说明 |
|------|------|
| `external_db_query` | 查询外部数据源 (CSV/JSON) |
| `import_external_data` | 从外部数据源导入实体到 CAD |
| `export_to_external` | 导出 CAD 实体到外部文件 |
| `list_data_sources` | 列出可用数据源 |
### 沙箱 (3)
| 工具 | 说明 |
|------|------|
| `sandbox_validate` | 验证 Lisp 代码安全规则 |
| `sandbox_allowlist_add` | 添加规则到会话白名单 |
| `sandbox_allowlist_clear` | 清除会话白名单 |
### 审计日志 (2)
| 工具 | 说明 |
|------|------|
| `audit_log_query` | 查询审计日志(支持分页和筛选) |
| `audit_log_stats` | 获取审计日志统计 |
### CAD 连接池 (4)
| 工具 | 说明 |
|------|------|
| `cad_pool_discover` | 发现所有 CAD 实例 |
| `cad_pool_switch` | 切换活动 CAD 实例 |
| `cad_pool_health` | 检查所有实例健康状态 |
| `cad_pool_stats` | 获取连接池统计 |
---
## 七、MCP 资源 (11 个)
## MCP 资源
### 静态资源 (13)
| URI | 名称 | 说明 | 可订阅 |
|-----|------|------|--------|
| `atlisp://cad/info` | CAD Info | CAD 连接信息 | ✓ |
| `atlisp://dwg/layers` | Layers | 图层列表 | ✓ |
| `atlisp://dwg/entities` | Entities | 实体列表/统计 | ✓ |
| `atlisp://dwg/texts` | Texts | 文本实体列表 | ✓ |
| `atlisp://dwg/text-content` | Text Content | 文字内容与位置 | ✓ |
| `atlisp://dwg/text-combined` | Combined Text | 合并后的段落文本 | ✓ |
| `atlisp://dwg/name` | DWG Name | 当前文件名 | ✓ |
| `atlisp://dwg/path` | DWG Path | 文件完整路径 | ✓ |
| `atlisp://dwg/block-refs` | Block References | 块参照与属性 | ✓ |
| `atlisp://dwg/tbl` | Tables | CAD 表数据 | ✓ |
| `atlisp://cad/dwgs` | DWG List | 所有打开的 DWG | ✓ |
| `atlisp://packages` | Packages | 已安装包列表 | ✓ |
| `atlisp://platforms` | Platforms | 支持的平台信息 | ✗ |
| `atlisp://standards/drafting` | Drafting Standards | CAD 制图规范 | ✗ |
| `atlisp://standards/coding` | Coding Standards | @lisp 编码规范 | ✗ |
| `atlisp://platforms` | Platforms | 支持的平台 | ✗ |
| `atlisp://standards/drafting` | Drafting | CAD 制图规范 | ✗ |
| `atlisp://standards/coding` | Coding | @lisp 编码规范 | ✗ |
### 资源参数过滤
### 资源模板
```
atlisp://dwg/entities # 返回实体统计(类型+数量)
atlisp://dwg/entities?type=LINE # 返回 LINE 类型实体列表
atlisp://dwg/entities?layer=0 # 返回 0 图层实体列表
atlisp://dwg/entities?bbox=0,0,100,100 # 返回区域内的实体列表
atlisp://dwg/texts?layer=0&limit=100 # 分页获取文本
atlisp://dwg/layers?name=0 # 查询特定图层
atlisp://packages?name=base # 过滤包列表
```
### 资源模板 (5 个)
| URI 模板 | 说明 |
|---------|------|
| `atlisp://dwg/entity/{handle}` | 按句柄查询实体详情 |
| `atlisp://dwg/entities?type={type}` | 按类型查询实体 |
| `atlisp://dwg/layers?name={name}` | 按名称查询图层 |
|----------|------|
| `atlisp://dwg/entity/{handle}` | 按句柄查实体详情 |
| `atlisp://dwg/entities?type={type}&layer={layer}&bbox={bbox}` | 过滤实体 |
| `atlisp://dwg/block-refs/{blockName}` | 按块名过滤块参照 |
| `atlisp://dwg/tbl/{table}` | 查询表(layer/block/textstyle/dimstyle/linetype/ucs/view/viewport/regapp/plotstyle) |
| `atlisp://dwg/text-content?bbox={bbox}&layer={layer}&offset={offset}&limit={limit}` | 分页文字 |
| `atlisp://packages?search={query}` | 搜索包 |
| `atlisp://dwg/texts?layer={layer}&offset={offset}&limit={limit}` | 分页获取文本 |
### MCP 根目录 (Roots) - 2 个
### MCP 根目录 (Roots)
| URI | 名称 | 说明 |
|-----|------|------|
| `file://~/@lisp` | @lisp 根目录 | @lisp 工作目录 |
| `file://~/@lisp/projects` | 项目目录 | 存放 DWG 文件的项目文件夹 |
| URI | 说明 |
|-----|------|
| `file://~/.atlisp` | @lisp 工作目录 |
| `file://~/.atlisp/projects` | 项目目录 |
### MCP 方法
---
| 方法 | 说明 |
|------|------|
| `initialize` | 初始化连接 |
| `roots/list` | 列出根目录 |
| `tools/list` | 列出工具 |
| `tools/call` | 调用工具 |
| `resources/list` | 列出资源 |
| `resources/read` | 读取资源 |
| `resources/subscribe` | 订阅资源变更 |
| `resources/unsubscribe` | 取消订阅 |
| `prompts/list` | 列出提示模板 |
| `prompts/get` | 获取提示模板 |
## MCP Prompts (16)
### 资源访问示例
| Prompt | 功能 | 参数 |
|--------|------|------|
| `excel-report` | Excel 报表导出 | visible, savePath |
| `geometry-calc` | 几何计算 | action, points |
| `generate-dimension` | 生成尺寸标注 | style |
| `analyze-drawing` | 分析当前图纸统计 | — |
| `coding-conventions` | AutoLISP 编码规范 | — |
| `string-process` | 字符串处理 | action, input |
| `json-exchange` | JSON 数据交换 | action, data |
| `color-convert` | 颜色转换 | action, value |
| `pickset-filter` | 选择集操作 | action, dxfType, layerName |
| `text-process` | 文本处理 | action, markdown |
| `curve-analysis` | 曲线分析 | action, distance |
| `manage-blocks` | 块操作 | action, blockName |
| `manage-layers` | 图层管理 | action, layers |
| `export-entities` | 导出实体统计 | format |
| `batch-draw-lines` | 批量画线段 | count, length |
| `draw-residential` | 农村民居平面图 | width, depth, rooms |
| `draw-floor-plan` | 建筑楼层平面图 | floor, scale |
```json
{
"jsonrpc": "2.0",
"id": 1,
"method": "resources/read",
"params": {
"uri": "atlisp://dwg/entities"
}
}
```
---
返回实体统计:
```json
{
"contents": [{
"uri": "atlisp://dwg/entities",
"mimeType": "application/json",
"text": "{\"total\":150,\"summary\":[{\"type\":\"LWPOLYLINE\",\"count\":45},{\"type\":\"LINE\",\"count\":32}]}"
}]
}
```
## HTTP API 端点
| 方法 | 路径 | 说明 |
|------|------|------|
| `GET` | `/health` | 健康检查 |
| `GET` | `/metrics` | Prometheus 指标 |
| `POST` | `/mcp` | MCP JSON-RPC |
| `GET` | `/mcp` | MCP 信息 |
| `GET` | `/sse` | SSE 长连接端点 |
| `POST` | `/message` | SSE 消息发送 |
| `WS` | `/ws` | WebSocket 端点 |
| `POST` | `/config/reload` | 热重载配置 |
| `GET` | `/rate-limit/status` | 速率限制状态 |
| `POST` | `/rate-limit/reset` | 重置速率限制 |
| `GET` | `/api/docs` | API 文档页面 |
| `GET` | `/debug` | 调试面板 |
| `GET` | `/playground` | 工具游乐场 |
---
## 八、环境变量
## 环境变量
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `TRANSPORT` | `http` | 传输模式:`http` 或 `stdio` |
| `PORT` | `8110` | HTTP 模式监听端口 |
| `HOST` | `0.0.0.0` | HTTP 模式监听地址 |
| `MESSAGE_TIMEOUT` | `60000` | 消息超时(毫秒) |
| `MCP_API_KEY` | (无) | API Key 认证(可选) |
| `ENABLE_SSE` | `true` | 启用 SSE 模式(默认启用) |
| `PORT` | `8110` | HTTP 端口 |
| `HOST` | `0.0.0.0` | HTTP 监听地址 |
| `TRANSPORT` | `http` | 传输模式: http/stdio/ws |
| `MCP_API_KEY` | — | API Key 认证 |
| `ENABLE_SSE` | `true` | 启用 SSE |
| `MESSAGE_TIMEOUT` | `60000` | 消息超时 (ms) |
| `HEARTBEAT_INTERVAL` | `30000` | 心跳间隔 (ms) |
| `BUSY_RETRIES` | `10` | CAD 忙重试次数 |
| `BUSY_DELAY` | `500` | 重试延迟 (ms) |
| `ENABLE_CORS` | `true` | 启用 CORS |
| `CORS_ORIGIN` | `*` | CORS 源 |
| `RATE_LIMIT_WINDOW` | `60000` | 速率限制窗口 (ms) |
| `RATE_LIMIT_MAX` | `100` | 窗口内最大请求数 |
| `RESOURCE_CACHE_TTL` | `5000` | 资源缓存 TTL (ms) |
| `FUNCTION_LIB_CACHE_TTL` | `300000` | 函数库缓存 TTL (ms) |
| `DEBUG` | `false` | 调试模式 |
| `DEBUG_FILE` | — | 调试日志文件路径 |
| `FUNCTION_LIB_URL` | `http://s3.atlisp.cn/json/functions.json` | 函数库 URL |
| `CONFIG_FILE` | `~/.atlisp/atlisp.config.json` | 配置文件路径 |
| `METRICS_ENABLED` | `true` | 启用 /metrics 端点 |
| `REQUEST_LOG_ENABLED` | `true` | 启用请求日志 |
| `SSL_KEY_PATH` | — | SSL 私钥文件 |
| `SSL_CERT_PATH` | — | SSL 证书文件 |
| `LLM_API_KEY` | — | LLM API Key (sampling) |
| `LLM_API_URL` | `https://api.openai.com/v1/chat/completions` | LLM API URL |
| `LLM_MODEL` | `gpt-4o-mini` | LLM 模型 |
| `LLM_MAX_TOKENS` | `4096` | LLM 最大 tokens |
| `LLM_TEMPERATURE` | `0.7` | LLM 温度 |
| `API_KEY_RATE_LIMIT` | `1000` | API Key 速率限制 |
### 启用 SSE 模式
---
SSE (Server-Sent Events) 模式默认启用,提供长连接推送能力,适合需要实时响应的场景。
## 命令行参数
**禁用 SSE:**
| 参数 | 说明 |
|------|------|
| `--port <number>` | HTTP 端口 |
| `--host <address>` | HTTP 主机地址 |
| `--transport <mode>` | 传输模式 (http/stdio/ws) |
| `--stdio` | 等价于 `--transport stdio` |
| `--ws` | 等价于 `--transport ws` |
| `--config <path>` | 配置文件路径 |
| `--ssl-key <path>` | SSL 私钥文件 |
| `--ssl-cert <path>` | SSL 证书文件 |
```bash
# Windows PowerShell
$env:ENABLE_SSE="false"; atlisp-mcp
---
# 或命令行
ENABLE_SSE=false atlisp-mcp
```
## 配置文件
**SSE 端点:**
配置文件位于 `~/.atlisp/atlisp.config.json`,支持以下字段:
| 端点 | 方法 | 说明 |
|------|------|------|
| `/sse` | GET | 建立 SSE 连接,返回消息端点 `/message` |
| `/mcp/sse` | GET | 同上 |
| `/message` | POST | 发送 JSON-RPC 请求,响应通过 SSE 推送 |
**SSE 连接流程:**
```json
{
"port": 8110,
"host": "0.0.0.0",
"transport": "http",
"apiKey": "your-api-key",
"enableSse": true,
"messageTimeout": 60000,
"heartbeatInterval": 30000,
"enableCors": true,
"corsOrigin": "*",
"rateLimitWindow": 60000,
"rateLimitMax": 100,
"debug": false,
"metricsEnabled": true,
"requestLogEnabled": true,
"maxPoolSize": 3,
"apiKeys": [
{ "key": "key1", "limit": 100, "name": "user1", "role": "admin" }
],
"sslKey": "/path/to/key.pem",
"sslCert": "/path/to/cert.pem",
"llmApiKey": "sk-xxx",
"llmApiUrl": "https://api.openai.com/v1/chat/completions",
"llmModel": "gpt-4o-mini",
"llmMaxTokens": 4096,
"llmTemperature": 0.7
}
```
1. 客户端 → GET /sse
Header: Accept: text/event-stream
2. 服务器 → 返回 SSE 流,包含:
event: endpoint
data: {"path": "/message"}
event: capabilities
data: {...}
配置变更会自动热重载。
3. 客户端 → POST /message
Header: mcp-session-id: <session-id>
Body: {"jsonrpc":"2.0","id":1,"method":"tools/call",...}
4. 服务器 → 通过 SSE 推送响应:
event: message
data: {"jsonrpc":"2.0","id":1,"result":{...}}
```
---
## 九、支持平台
## 架构与开发
- **AutoCAD** (扩展名: `.fas`, `.vlx`)
- **ZWCAD** (扩展名: `.zelx`, `.vls`)
- **GStarCAD** (扩展名: `.des`)
- **BricsCAD** (扩展名: `.des`)
架构图、项目结构、开发指南请参见 [`DEV.md`](DEV.md)。
---
## 十、工作原理
## 故障排除
1. MCP Server 通过 `edge-js` 调用 .NET 代码
2. .NET 通过 COM 互操作连接 CAD 应用程序
3. 支持获取运行中的 CAD 或自动启动
4. 通过 `SendCommand` 向 CAD 发送 LISP 代码
5. 执行前自动检测 CAD 状态(IsQuiescent)
6. CAD 忙碌时自动等待(最多 10 次重试)
---
## 十一、故障排除
| 问题 | 解决方案 |
|------|---------|
| 连接失败 | 确保 CAD 已启动并启用 COM 接口 |
| 工具调用超时 | CAD 可能繁忙,稍后重试 |
| 中文乱码 | 使用 `vl-prin1-to-string` 处理 |
| 工具调用超时 | CAD 可能繁忙,稍后重试;增大 `MESSAGE_TIMEOUT` |
| 中文乱码 | 使用 `encoding: gbk` 参数或用 `vl-prin1-to-string` 处理 |
| 括号错误 | MCP Server 会自动检查并提示 |
| CAD 未自动启动 | 检查 COM 权限,以管理员身份运行 |
| 端口被占用 | 使用 `--port` 指定其他端口 |
| 全局命令找不到 | 检查 npm 全局安装路径是否在 PATH 中 |

@@ -506,2 +842,2 @@ ---

ISC
ISC

Sorry, the diff of this file is too big to display