@atlisp/mcp 1.8.10 → 1.8.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,22 +1,67 @@
1
1
  # @lisp MCP Server
2
2
 
3
- MCP (Model Context Protocol) Server for @lisp on CAD - 为 CAD 环境提供 @lisp 包管理服务的 MCP 服务器,同时为 AI AGENT 操控 CAD 提供调用工具和通道。
3
+ MCP (Model Context Protocol) Server for @lisp on CAD 为 CAD 环境提供 @lisp 包管理服务的 MCP 服务器,同时为 AI Agent 操控 CAD 提供 **220+ 个调用工具**和通道。
4
+
5
+ 支持 **AutoCAD / ZWCAD / GStarCAD / BricsCAD**,通过 COM 互操作与 CAD 通信。
6
+
7
+ ---
8
+
9
+ ## 目录
10
+
11
+ - [功能特性](#功能特性)
12
+ - [快速安装](#快速安装)
13
+ - [配置 AI Agent](#配置-ai-agent)
14
+ - [启动服务](#启动服务)
15
+ - [连接 CAD](#连接-cad)
16
+ - [工具列表](#工具列表)
17
+ - [MCP 资源](#mcp-资源)
18
+ - [MCP Prompts](#mcp-prompts)
19
+ - [HTTP API 端点](#http-api-端点)
20
+ - [环境变量](#环境变量)
21
+ - [命令行参数](#命令行参数)
22
+ - [配置文件](#配置文件)
23
+ - [工作原理](#工作原理)
24
+ - [Docker](#docker)
25
+ - [开发指南](#开发指南)
26
+ - [故障排除](#故障排除)
27
+ - [许可证](#许可证)
28
+
29
+ ---
4
30
 
5
31
  ## 功能特性
6
32
 
7
- - 连接 AutoCAD/ZWCAD/GStarCAD/BricsCAD
8
- - 执行 AutoLISP 代码,支持绘图、查询、标注
9
- - AI Agent 可通过 MCP 协议控制 CAD 绘图
10
- - 管理 @lisp 包(列出、搜索、安装)
11
- - CAD 未运行自动启动
12
- - 实体/图层/块 CRUD 操作
13
- - DWG 文件操作(打开/保存/导出)
14
- - MCP 资源订阅推送
15
- - MCP 根目录支持
33
+ - **连接多平台 CAD** — AutoCAD / ZWCAD / GStarCAD / BricsCAD
34
+ - **执行 AutoLISP** — 执行 LISP 代码并获取结果
35
+ - **AI Agent 控制 CAD** 220+ MCP 工具,涵盖绘图、编辑、查询、管理
36
+ - **包管理** — 列出、搜索、安装 @lisp
37
+ - **批量操作** — 批量复制/移动/旋转/缩放/镜像/偏移/改名/改色/改图层
38
+ - **3D 建模** — 创建 Box/Sphere/Cylinder/Cone/Torus/Wedge,布尔运算,拉伸/旋转
39
+ - **图纸集管理** — 创建/发布/归档/比较/打包图纸集
40
+ - **动态块** — 获取/设置参数、可见性状态
41
+ - **几何约束与标注约束** — 添加/删除/列出约束
42
+ - **外部参照** — 附着/拆离/绑定/裁剪/路径管理/批量相对化
43
+ - **PDF/DGN/DWF 底图** — 附着/拆离/重载/批量附着
44
+ - **扩展数据 (Xdata)** — 读写/复制/搜索/导入/导出
45
+ - **管道 (Pipeline)** — 编排多步工具调用链
46
+ - **触发器 (Watch)** — 注册 CAD 变更触发器,等待条件满足
47
+ - **Webhook** — 事件驱动回调(工具执行/包安装/CAD 连接等)
48
+ - **REPL** — 交互式 Lisp 执行会话
49
+ - **流式读取** — 分页流式读取实体/文字/块参照
50
+ - **外部数据** — 查询/导入/导出 CSV/JSON 数据源
51
+ - **审计日志** — 查询和统计工具调用历史
52
+ - **CAD 连接池** — 发现/切换/健康检查多 CAD 实例
53
+ - **沙箱** — 验证 LISP 代码安全性
54
+ - **资源订阅** — 实时推送 CAD/DWG/包变更
55
+ - **LLM Sampling** — 通过配置的 LLM 提供采样能力
56
+ - **Prometheus 指标** — 导出 /metrics 端点
57
+ - **SSL/TLS** — 支持 HTTPS 加密通信
58
+ - **API Key 认证与速率限制**
59
+ - **配置热重载** — 配置文件变更自动加载
60
+ - **多种传输模式** — HTTP / SSE / stdio / WebSocket
16
61
 
17
62
  ---
18
63
 
19
- ## 一、安装
64
+ ## 快速安装
20
65
 
21
66
  ### Windows (PowerShell)
22
67
 
@@ -25,21 +70,27 @@ iwr -useb https://atlisp.cn/install.ps1 | iex
25
70
  ```
26
71
 
27
72
  安装脚本会自动:
28
- - 安装 Node.js(如未安装)
73
+ - 安装 Node.js(如未安装,支持 winget/choco/scoop/MSI)
29
74
  - 全局安装 `@atlisp/mcp` 包
30
- - 创建命令 `atlisp-mcp`
75
+ - 注册命令 `atlisp-mcp`
76
+
77
+ ### 手动安装 (npm)
78
+
79
+ ```bash
80
+ npm install -g @atlisp/mcp
81
+ ```
31
82
 
32
83
  ### 验证安装
33
84
 
34
- ```powershell
85
+ ```bash
35
86
  atlisp-mcp --version
36
87
  ```
37
88
 
38
89
  ---
39
90
 
40
- ## 二、配置 AI Agent (WorkBuddy / Claude Desktop)
91
+ ## 配置 AI Agent
41
92
 
42
- ### WorkBuddy 配置
93
+ ### WorkBuddy
43
94
 
44
95
  在 `~/.workbuddy/.mcp.json` 中添加:
45
96
 
@@ -53,7 +104,7 @@ atlisp-mcp --version
53
104
  }
54
105
  ```
55
106
 
56
- ### Claude Desktop 配置
107
+ ### Claude Desktop
57
108
 
58
109
  在 `~/AppData/Roaming/Claude/claude_desktop_config.json` 中添加:
59
110
 
@@ -70,7 +121,7 @@ atlisp-mcp --version
70
121
  }
71
122
  ```
72
123
 
73
- ### 其他 AI Agent (Cline / Cursor / Windsurf)
124
+ ### Cline / Cursor / Windsurf
74
125
 
75
126
  ```json
76
127
  {
@@ -86,9 +137,24 @@ atlisp-mcp --version
86
137
  }
87
138
  ```
88
139
 
140
+ ### opencode / Goose / 其他支持 stdio 的 Agent
141
+
142
+ ```json
143
+ {
144
+ "mcpServers": {
145
+ "atlisp-mcp": {
146
+ "command": "atlisp-mcp",
147
+ "env": {
148
+ "TRANSPORT": "stdio"
149
+ }
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
89
155
  ---
90
156
 
91
- ## 三、启动服务
157
+ ## 启动服务
92
158
 
93
159
  ### HTTP 模式(默认,端口 8110)
94
160
 
@@ -96,17 +162,29 @@ atlisp-mcp --version
96
162
  atlisp-mcp
97
163
  ```
98
164
 
99
- 服务启动后输出:
165
+ 输出:
100
166
  ```
101
167
  @lisp MCP Server 启动 - http://0.0.0.0:8110 - Streamable HTTP
102
168
  ```
103
169
 
104
- ### stdio 模式(AI Agent 直接调用)
170
+ ### stdio 模式
105
171
 
106
172
  ```bash
107
- atlisp-mcp
108
- # 环境变量
109
- TRANSPORT=stdio
173
+ TRANSPORT=stdio atlisp-mcp
174
+ ```
175
+
176
+ ### WebSocket 模式
177
+
178
+ ```bash
179
+ TRANSPORT=ws atlisp-mcp
180
+ # 或
181
+ atlisp-mcp --ws
182
+ ```
183
+
184
+ ### 指定端口/主机
185
+
186
+ ```bash
187
+ atlisp-mcp --port 9000 --host 127.0.0.1
110
188
  ```
111
189
 
112
190
  ### 健康检查
@@ -117,28 +195,31 @@ curl http://localhost:8110/health
117
195
 
118
196
  返回 `{"status":"ok","cad":"connected"}` 表示服务正常。
119
197
 
120
- ### HTTP 端点
198
+ ### 查看指标
121
199
 
122
- | 端点 | 方法 | 说明 |
123
- |------|------|------|
124
- | `/health` | GET | 健康检查 |
125
- | `/sse` | GET | SSE 长连接端点(需 ENABLE_SSE=true) |
126
- | `/mcp/sse` | GET/POST | SSE MCP 端点(需 ENABLE_SSE=true) |
127
- | `/mcp` | POST | MCP JSON-RPC 端点(主要接口) |
200
+ ```bash
201
+ curl http://localhost:8110/metrics
202
+ ```
203
+
204
+ ### 调试面板
205
+
206
+ 打开浏览器访问 `http://localhost:8110/debug`
207
+
208
+ ### 工具游乐场
209
+
210
+ 打开浏览器访问 `http://localhost:8110/playground`
128
211
 
129
212
  ---
130
213
 
131
- ## 四、连接 CAD
214
+ ## 连接 CAD
132
215
 
133
216
  ### 前置条件
134
217
 
135
218
  - Windows 系统
136
- - CAD 软件已安装(AutoCAD / ZWCAD / GStarCAD / BricsCAD)
137
- - CAD 已启动(或配置为自动启动)
138
-
139
- ### 连接方式
219
+ - CAD 软件已安装
220
+ - CAD 已启动或允许自动启动
140
221
 
141
- 使用 MCP 工具 `connect_cad` 连接 CAD:
222
+ ### 使用 MCP 工具连接
142
223
 
143
224
  ```json
144
225
  {
@@ -147,349 +228,604 @@ curl http://localhost:8110/health
147
228
  }
148
229
  ```
149
230
 
231
+ 或指定平台:
232
+
233
+ ```json
234
+ {
235
+ "name": "connect_cad",
236
+ "arguments": {
237
+ "platform": "AutoCAD"
238
+ }
239
+ }
240
+ ```
241
+
150
242
  **自动行为**:
151
243
  - 如果 CAD 已运行,连接现有实例
152
244
  - 如果 CAD 未运行,通过 COM 自动创建新实例
153
245
 
154
- 连接成功返回: `已连接到 AutoCAD 2021`
246
+ 连接成功返回类似: `已连接到 AutoCAD 2025`
155
247
 
156
248
  ---
157
249
 
158
- ## 五、绘图示例
250
+ ## 工具列表 (220+)
159
251
 
160
- ### 1. 画直线
252
+ ### 系统与 CAD 连接 (11)
161
253
 
162
- ```json
163
- {
164
- "name": "eval_lisp",
165
- "arguments": {
166
- "code": "(command \"_.LINE\" \"0,0\" \"100,100\" \"\")"
167
- }
168
- }
169
- ```
254
+ | 工具 | 说明 | 参数 |
255
+ |------|------|------|
256
+ | `connect_cad` | 连接 CAD | `platform` (可选) |
257
+ | `eval_lisp` | 执行 LISP 代码(无返回值) | `code` (必填) |
258
+ | `eval_lisp_with_result` | 执行 LISP 并返回结果 | `code` (必填), `encoding` (可选) |
259
+ | `get_cad_info` | 获取 CAD 信息 | — |
260
+ | `get_platform_info` | 获取平台信息 | — |
261
+ | `at_command` | 执行 @lisp 命令 | `command` (必填) |
262
+ | `new_document` | 新建空白文档 | — |
263
+ | `bring_to_front` | 切换 CAD 到前台 | — |
264
+ | `install_atlisp` | 安装 @lisp | — |
265
+ | `init_atlisp` | 初始化 @lisp 环境 | — |
266
+ | `get_system_status` | 获取系统诊断信息 | — |
170
267
 
171
- ### 2. 画矩形
268
+ ### LISP 执行
172
269
 
173
- ```json
174
- {
175
- "name": "eval_lisp",
176
- "arguments": {
177
- "code": "(command \"_.RECTANG\" \"0,0\" \"100,100\")"
178
- }
179
- }
180
- ```
270
+ | 工具 | 说明 |
271
+ |------|------|
272
+ | `eval_lisp` | 执行 LISP 代码,不返回结果 |
273
+ | `eval_lisp_with_result` | 执行 LISP 代码并返回结果,支持 `encoding: utf-8/gbk/gb2312/gb18030` |
274
+ | `lisp_repl` | REPL 会话执行,自动追踪变量和历史 |
275
+ | `lisp_repl_history` | 获取 REPL 会话历史 |
276
+ | `lisp_repl_list` | 列出活跃 REPL 会话 |
277
+ | `lisp_repl_close` | 关闭 REPL 会话 |
181
278
 
182
- ### 3. 画圆
279
+ ### 包管理 (3)
183
280
 
184
- ```json
185
- {
186
- "name": "eval_lisp",
187
- "arguments": {
188
- "code": "(command \"_.CIRCLE\" \"50,50\" \"25\")"
189
- }
190
- }
191
- ```
281
+ | 工具 | 说明 | 参数 |
282
+ |------|------|------|
283
+ | `list_packages` | 列出已安装包 | — |
284
+ | `search_packages` | 搜索包 | `query` (必填) |
285
+ | `install_package` | 安装包到 CAD | `packageName` (必填) |
192
286
 
193
- ### 4. 写文字
287
+ ### 信息与函数 (5)
194
288
 
195
- ```json
196
- {
197
- "name": "eval_lisp",
198
- "arguments": {
199
- "code": "(entmake (list (cons 0 \"TEXT\") (cons 10 (list 0 0 0)) (cons 40 5) (cons 1 \"标题\")))"
200
- }
201
- }
202
- ```
289
+ | 工具 | 说明 |
290
+ |------|------|
291
+ | `get_function_usage` | 获取 @lisp 函数用法 |
292
+ | `list_symbols` | 列出所有符号(函数/变量) |
293
+ | `import_funlib` | 导入函数库数据到 AI Agent |
294
+ | `list_prompts` | 列出提示模板 |
295
+ | `get_prompt` | 获取指定提示模板 |
203
296
 
204
- ### 5. 获取查询结果
297
+ ### 实体操作 (4)
205
298
 
206
- ```json
207
- {
208
- "name": "eval_lisp_with_result",
209
- "arguments": {
210
- "code": "(getvar \"acadver\")"
211
- }
212
- }
213
- ```
299
+ | 工具 | 说明 |
300
+ |------|------|
301
+ | `get_entity` | 获取实体属性(句柄/类型/图层/颜色等) |
302
+ | `set_entity` | 设置实体属性(layer/color/linetype/elevation) |
303
+ | `delete_entity` | 删除实体 |
304
+ | `select_entities` | 按条件选择实体(type/layer 过滤) |
305
+ | `get_entity_info` | 获取实体详细信息 |
214
306
 
215
- 返回 CAD 版本号,如 "AC1027"
307
+ ### 图层操作 (4)
216
308
 
217
- ### 6. 统计图形数量
309
+ | 工具 | 说明 |
310
+ |------|------|
311
+ | `create_layer` | 创建图层 |
312
+ | `delete_layer` | 删除图层 |
313
+ | `set_layer` | 设置图层属性(color/linetype/freeze/thaw/lock/unlock) |
314
+ | `set_current_layer` | 设置当前图层 |
218
315
 
219
- ```json
220
- {
221
- "name": "eval_lisp_with_result",
222
- "arguments": {
223
- "code": "(sslength (ssget \"_X\"))"
224
- }
225
- }
226
- ```
316
+ ### 块操作 (6)
227
317
 
228
- ### 7. 切换 CAD 到前台
318
+ | 工具 | 说明 |
319
+ |------|------|
320
+ | `create_block` | 创建块定义 |
321
+ | `insert_block` | 插入块参照 |
322
+ | `get_blocks` | 获取所有块定义 |
323
+ | `explode_block` | 炸开块参照 |
324
+ | `batch_get_block_attributes` | 批量获取块属性 |
325
+ | `batch_set_block_attributes` | 批量设置块属性 |
229
326
 
230
- CAD 在后台运行时,唤醒到前台:
327
+ ### 动态块与参数化 (6)
231
328
 
232
- ```json
233
- {
234
- "name": "bring_to_front",
235
- "arguments": {}
236
- }
237
- ```
329
+ | 工具 | 说明 |
330
+ |------|------|
331
+ | `get_dynamic_block_properties` | 获取动态块所有属性 |
332
+ | `set_dynamic_block_property` | 设置动态块属性值 |
333
+ | `get_block_parameters` | 获取块参数值 |
334
+ | `set_block_parameter` | 设置块参数值 |
335
+ | `list_visibility_states` | 列出可见性状态 |
336
+ | `set_visibility_state` | 切换可见性状态 |
238
337
 
239
- ---
338
+ ### 文件/DWG 操作 (5)
240
339
 
241
- ## 六、可用工具列表 (35 个)
340
+ | 工具 | 说明 |
341
+ |------|------|
342
+ | `open_dwg` | 打开 DWG 文件 |
343
+ | `save_dwg` | 保存图形 |
344
+ | `export_pdf` | 导出 PDF |
345
+ | `export_dxf` | 导出 DXF |
346
+ | `export_dwf` | 导出 DWF |
347
+ | `close_dwg` | 关闭图形 |
348
+ | `import_dxf` | 导入 DXF 文件 |
349
+ | `import_dgn` | 导入 DGN 文件 |
350
+ | `export_dgn` | 导出 DGN 文件 |
351
+
352
+ ### 标注与填充 (7)
353
+
354
+ | 工具 | 说明 |
355
+ |------|------|
356
+ | `create_dimension` | 创建标注(ALIGNED/LINEAR/ORDINATE/RADIAL/DIAMETER/ANGULAR) |
357
+ | `get_dimension` | 获取标注值 |
358
+ | `create_hatch` | 创建图案填充 |
359
+ | `set_hatch` | 设置填充属性 |
360
+ | `get_block_attributes` | 获取块属性值 |
361
+ | `set_block_attribute` | 设置块属性值 |
362
+ | `dimension_style` | 创建和管理标注样式 |
363
+
364
+ ### 样式管理 (11)
242
365
 
243
- ### CAD 连接
366
+ | 工具 | 说明 |
367
+ |------|------|
368
+ | `create_dimension_style` | 创建标注样式 |
369
+ | `set_dimstyle_var` | 设置标注样式变量 |
370
+ | `list_dimension_styles` | 列出所有标注样式 |
371
+ | `create_text_style` | 创建文字样式 |
372
+ | `list_text_styles` | 列出所有文字样式 |
373
+ | `create_linetype` | 创建线型 |
374
+ | `load_linetype` | 加载线型文件 |
375
+ | `list_linetypes` | 列出所有线型 |
376
+ | `create_mleader_style` | 创建多重引线样式 |
377
+ | `set_mleader_style_prop` | 设置多重引线样式属性 |
378
+ | `list_mleader_styles` | 列出多重引线样式 |
379
+
380
+ ### 视图与缩放 (5)
381
+
382
+ | 工具 | 说明 |
383
+ |------|------|
384
+ | `zoom_extents` | 缩放到图形范围 |
385
+ | `zoom_window` | 缩放到窗口 |
386
+ | `create_named_view` | 创建命名视图 |
387
+ | `restore_named_view` | 恢复命名视图 |
388
+ | `list_named_views` | 列出所有命名视图 |
244
389
 
245
- | 工具名称 | 描述 | 参数 |
246
- |---------|------|------|
247
- | `connect_cad` | 连接到 CAD | `platform`: AutoCAD/ZWCAD/GStarCAD/BricsCAD |
248
- | `get_cad_info` | 获取 CAD 信息 | 无 |
249
- | `bring_to_front` | 切换 CAD 到前台 | 无 |
250
- | `new_document` | 新建空白文档 | 无 |
251
- | `get_system_status` | 获取系统诊断信息 | 无 |
390
+ ### UCS 与布局 (11)
252
391
 
253
- ### LISP 执行
392
+ | 工具 | 说明 |
393
+ |------|------|
394
+ | `create_ucs` | 创建 UCS |
395
+ | `set_ucs` | 切换到 UCS |
396
+ | `list_ucs` | 列出所有 UCS |
397
+ | `delete_ucs` | 删除 UCS |
398
+ | `get_current_ucs` | 获取当前 UCS 名称 |
399
+ | `create_layout` | 创建布局 |
400
+ | `set_layout` | 切换布局 |
401
+ | `list_layouts` | 列出所有布局 |
402
+ | `delete_layout` | 删除布局 |
403
+ | `get_current_layout` | 获取当前布局 |
404
+ | `rename_layout` | 重命名布局 |
405
+
406
+ ### 查询与测量 (5)
407
+
408
+ | 工具 | 说明 |
409
+ |------|------|
410
+ | `measure_distance` | 测量两点距离 |
411
+ | `measure_area` | 测量多边形面积 |
412
+ | `get_3d_solid_info` | 获取 3D 实体信息 |
413
+ | `list_groups` | 列出所有组 |
414
+ | `get_group_entities` | 获取组内实体 |
415
+
416
+ ### 组操作 (4)
417
+
418
+ | 工具 | 说明 |
419
+ |------|------|
420
+ | `create_group` | 创建组 |
421
+ | `delete_group` | 删除组 |
422
+ | `list_groups` | 列出所有组 |
423
+ | `get_group_entities` | 获取组内实体句柄 |
424
+
425
+ ### 批量操作 (14)
426
+
427
+ | 工具 | 说明 |
428
+ |------|------|
429
+ | `batch_copy` | 批量复制实体到指定偏移 |
430
+ | `batch_move` | 批量移动到指定图层 |
431
+ | `batch_delete` | 批量删除实体 |
432
+ | `batch_rename` | 批量重命名实体 |
433
+ | `batch_set_color` | 批量设置颜色 |
434
+ | `batch_set_layer` | 批量设置图层 |
435
+ | `batch_set_linetype` | 批量设置线型 |
436
+ | `batch_explode` | 批量炸开 |
437
+ | `batch_mirror` | 批量镜像 |
438
+ | `batch_offset` | 批量偏移 |
439
+ | `batch_rotate` | 批量旋转 |
440
+ | `batch_scale` | 批量缩放 |
441
+ | `batch_match_properties` | 批量匹配属性(格式刷) |
442
+ | `batch_create_group` | 批量创建组 |
443
+ | `batch_add_to_group` | 批量添加到组 |
444
+
445
+ ### 3D 建模 (20)
446
+
447
+ | 工具 | 说明 |
448
+ |------|------|
449
+ | `create_box` | 创建立方体 |
450
+ | `create_sphere` | 创建球体 |
451
+ | `create_cylinder` | 创建圆柱体 |
452
+ | `create_cone` | 创建圆锥体 |
453
+ | `create_torus` | 创建圆环体 |
454
+ | `create_wedge` | 创建楔体 |
455
+ | `create_3d_face` | 创建 3D 面 |
456
+ | `create_3d_polyline` | 创建 3D 多段线 |
457
+ | `create_mesh` | 创建网格 |
458
+ | `extrude_solid` | 拉伸成实体 |
459
+ | `revolve_solid` | 旋转成实体 |
460
+ | `create_region` | 创建面域 |
461
+ | `boolean_union` | 并集 |
462
+ | `boolean_subtract` | 差集 |
463
+ | `boolean_intersect` | 交集 |
464
+ | `slice_solid` | 剖切实体 |
465
+ | `create_loft_surface` | 创建放样曲面 |
466
+ | `thicken_surface` | 曲面加厚 |
467
+ | `offset_surface` | 曲面偏移 |
468
+ | `convert_to_cloud_line` | 转为修订云线 |
469
+ | `create_cloud_line` | 创建修订云线 |
470
+
471
+ ### 约束 (4)
472
+
473
+ | 工具 | 说明 |
474
+ |------|------|
475
+ | `add_geom_constraint` | 添加几何约束(平行/垂直/相切/共线/同心/固定/对称/相等等) |
476
+ | `add_dim_constraint` | 添加标注约束(水平/垂直/对齐/半径/直径/角度) |
477
+ | `del_constraint` | 删除实体上所有约束 |
478
+ | `list_constraints` | 列出所有约束 |
479
+
480
+ ### 扩展数据 Xdata (9)
481
+
482
+ | 工具 | 说明 |
483
+ |------|------|
484
+ | `get_xdata` | 获取实体扩展数据 |
485
+ | `set_xdata` | 设置实体扩展数据 |
486
+ | `delete_xdata` | 删除扩展数据 |
487
+ | `list_xdata_apps` | 列出所有注册的扩展数据应用名 |
488
+ | `get_all_entity_xdata` | 获取所有扩展数据 |
489
+ | `copy_xdata` | 复制扩展数据到另一实体 |
490
+ | `search_by_xdata` | 按扩展数据搜索实体 |
491
+ | `export_xdata_to_file` | 导出扩展数据到 JSON |
492
+ | `import_xdata_from_file` | 从 JSON 导入扩展数据 |
493
+
494
+ ### PDF/底图 (14)
495
+
496
+ | 工具 | 说明 |
497
+ |------|------|
498
+ | `attach_pdf` | 附着 PDF 底图 |
499
+ | `detach_pdf` | 拆离 PDF 底图 |
500
+ | `reload_pdf` | 重载 PDF 底图 |
501
+ | `list_attached_pdfs` | 列出已附着的 PDF |
502
+ | `get_pdf_info` | 获取 PDF 底图信息 |
503
+ | `batch_attach_pdfs` | 批量附着 PDF |
504
+ | `create_dgn_underlay` | 附着 DGN 底图 |
505
+ | `create_dwf_underlay` | 附着 DWF 底图 |
506
+ | `create_hyperlink` | 创建超链接 |
507
+ | `remove_hyperlink` | 删除超链接 |
508
+
509
+ ### 外部参照 Xref (14)
510
+
511
+ | 工具 | 说明 |
512
+ |------|------|
513
+ | `attach_xref` | 附着外部参照 |
514
+ | `detach_xref` | 拆离外部参照 |
515
+ | `reload_xref` | 重载外部参照 |
516
+ | `unload_xref` | 卸载外部参照 |
517
+ | `list_xrefs` | 列出所有外部参照 |
518
+ | `bind_xref` | 绑定外部参照 |
519
+ | `clip_xref` | 裁剪外部参照 |
520
+ | `path_xref` | 修改外部参照路径 |
521
+ | `xref_notifications` | 配置/查询外部参照变更通知 |
522
+ | `xref_compare` | 比较外部参照 |
523
+ | `xref_convert_to_block` | 外部参照转为块 |
524
+ | `xref_demote` | 嵌套参照降级 |
525
+ | `xref_path_relative` | 批量转换路径为相对路径 |
526
+
527
+ ### 图纸集 (18)
528
+
529
+ | 工具 | 说明 |
530
+ |------|------|
531
+ | `create_sheet_set` | 创建图纸集 |
532
+ | `open_sheet_set` | 打开图纸集文件 |
533
+ | `list_sheet_sets` | 列出所有图纸集 |
534
+ | `add_sheet` | 添加图纸 |
535
+ | `list_sheets` | 列出图纸 |
536
+ | `delete_sheet` | 删除图纸 |
537
+ | `reorder_sheet` | 重新排序图纸 |
538
+ | `create_subset` | 创建子集 |
539
+ | `list_subsets` | 列出子集 |
540
+ | `set_sheet_property` | 设置图纸属性 |
541
+ | `get_sheet_set_property` | 获取图纸集属性 |
542
+ | `publish_sheet_set` | 发布图纸集 |
543
+ | `create_sheet_set_archive` | 归档图纸集 |
544
+ | `sheet_set_publish_options` | 发布选项配置 |
545
+ | `sheet_set_transmit` | eTransmit 打包 |
546
+ | `sheet_set_compare` | 比较图纸集 |
547
+ | `sheet_list_views` | 列出图纸视图 |
548
+ | `sheet_import_layouts` | 从 DWG 导入布局 |
549
+
550
+ ### 打印 (8)
551
+
552
+ | 工具 | 说明 |
553
+ |------|------|
554
+ | `plot_to_pdf` | 打印到 PDF |
555
+ | `plot_to_printer` | 打印到打印机 |
556
+ | `save_pdf_layout` | 布局另存为 PDF |
557
+ | `publish_layouts` | 批量发布布局到 PDF |
558
+ | `batch_plot_wizard` | 批量打印向导 |
559
+ | `plot_device_management` | 打印设备管理 |
560
+ | `plot_log` | 查询打印历史 |
561
+ | `plot_from_file_list` | 从文件列表批量打印 |
562
+
563
+ ### 管道 Pipeline (5)
564
+
565
+ | 工具 | 说明 |
566
+ |------|------|
567
+ | `pipeline_execute` | 执行管道链(多步工具顺序执行) |
568
+ | `pipeline_save` | 保存管道定义 |
569
+ | `pipeline_list` | 列出已保存管道 |
570
+ | `pipeline_run` | 运行已保存管道 |
571
+ | `pipeline_delete` | 删除管道 |
572
+
573
+ ### 触发器 Watch (5)
574
+
575
+ | 工具 | 说明 |
576
+ |------|------|
577
+ | `watch_register` | 注册 CAD 变更触发器 |
578
+ | `watch_remove` | 移除触发器 |
579
+ | `watch_list` | 列出所有触发器 |
580
+ | `watch_wait` | 等待触发器触发 |
581
+ | `watch_create_and_wait` | 注册并等待(合并操作) |
582
+
583
+ ### Webhook (4)
584
+
585
+ | 工具 | 说明 |
586
+ |------|------|
587
+ | `webhook_register` | 注册 webhook |
588
+ | `webhook_list` | 列出所有 webhook |
589
+ | `webhook_remove` | 移除 webhook |
590
+ | `webhook_log` | 获取 webhook 日志 |
591
+
592
+ ### 流式读取 (4)
593
+
594
+ | 工具 | 说明 |
595
+ |------|------|
596
+ | `stream_entities` | 分页流式读取实体数据 |
597
+ | `stream_text` | 分页流式读取文字内容 |
598
+ | `stream_block_refs` | 分页流式读取块参照 |
599
+ | `combine_text` | 碎片文本按位置组合为完整段落 |
254
600
 
255
- | 工具名称 | 描述 | 参数 |
256
- |---------|------|------|
257
- | `eval_lisp` | 执行 LISP 代码(无返回值) | `code`: LISP 代码 |
258
- | `eval_lisp_with_result` | 执行 LISP 并返回结果 | `code`, `encoding`: utf-8/gbk |
259
- | `at_command` | 执行 @lisp 命令 | `command`: 命令 |
260
-
261
- ### 包管理
262
-
263
- | 工具名称 | 描述 | 参数 |
264
- |---------|------|------|
265
- | `list_packages` | 列出已安装的包 | 无 |
266
- | `search_packages` | 搜索包 | `query`: 关键词 |
267
- | `install_package` | 安装包 | `packageName`: 包名 |
268
-
269
- ### 实体操作
270
-
271
- | 工具名称 | 描述 | 参数 |
272
- |---------|------|------|
273
- | `get_entity` | 获取实体属性 | `handle`: 句柄 |
274
- | `set_entity` | 设置实体属性 | `handle`, `property`: layer/color/linetype/elevation, `value` |
275
- | `delete_entity` | 删除实体 | `handle`: 句柄 |
276
- | `select_entities` | 按条件选择实体 | `filter`: {type, layer} |
277
-
278
- ### 图层操作
279
-
280
- | 工具名称 | 描述 | 参数 |
281
- |---------|------|------|
282
- | `create_layer` | 创建图层 | `name`, `color`: 1-255, `linetype`: 线型名 |
283
- | `delete_layer` | 删除图层 | `name` |
284
- | `set_layer` | 设置图层属性 | `name`, `property`: color/linetype/freeze/thaw/lock/unlock |
285
- | `set_current_layer` | 设置当前图层 | `name` |
286
-
287
- ### 块操作
288
-
289
- | 工具名称 | 描述 | 参数 |
290
- |---------|------|------|
291
- | `create_block` | 创建块定义 | `name`, `entities`: 实体代码 |
292
- | `insert_block` | 插入块 | `blockName`, `point`: x,y, `scale`: 1, `rotation`: 0 |
293
- | `get_blocks` | 获取所有块定义 | 无 |
294
- | `explode_block` | 炸开块 | `handle`: 句柄 |
295
-
296
- ### 文件操作
297
-
298
- | 工具名称 | 描述 | 参数 |
299
- |---------|------|------|
300
- | `open_dwg` | 打开 DWG 文件 | `filePath`: 完整路径 |
301
- | `save_dwg` | 保存图形 | `filePath`: 另存路径(可选) |
302
- | `export_pdf` | 导出 PDF | `outputPath`, `layout`: Model/Layout1 |
303
- | `close_dwg` | 关闭图形 | `save`: true/false |
304
-
305
- ### @lisp 系统
306
-
307
- | 工具名称 | 描述 | 参数 |
308
- |---------|------|------|
309
- | `install_atlisp` | 安装 @lisp | 无 |
310
- | `init_atlisp` | 初始化 @lisp 环境 | 无 |
311
- | `get_function_usage` | 获取函数用法 | `name`: 函数名, `package`: 包名 |
312
- | `list_symbols` | 列出所有符号 | `package`: 包名(可选) |
313
- | `import_funlib` | 导入函数库到 AI | `format`: json/list |
314
- | `get_platform_info` | 获取平台信息 | 无 |
315
- | `list_prompts` | 列出提示模板 | 无 |
316
- | `get_prompt` | 获取提示模板 | `name`, `args`: 参数 |
601
+ ### 外部数据 (4)
602
+
603
+ | 工具 | 说明 |
604
+ |------|------|
605
+ | `external_db_query` | 查询外部数据源 (CSV/JSON) |
606
+ | `import_external_data` | 从外部数据源导入实体到 CAD |
607
+ | `export_to_external` | 导出 CAD 实体到外部文件 |
608
+ | `list_data_sources` | 列出可用数据源 |
609
+
610
+ ### 沙箱 (3)
611
+
612
+ | 工具 | 说明 |
613
+ |------|------|
614
+ | `sandbox_validate` | 验证 Lisp 代码安全规则 |
615
+ | `sandbox_allowlist_add` | 添加规则到会话白名单 |
616
+ | `sandbox_allowlist_clear` | 清除会话白名单 |
617
+
618
+ ### 审计日志 (2)
619
+
620
+ | 工具 | 说明 |
621
+ |------|------|
622
+ | `audit_log_query` | 查询审计日志(支持分页和筛选) |
623
+ | `audit_log_stats` | 获取审计日志统计 |
624
+
625
+ ### CAD 连接池 (4)
626
+
627
+ | 工具 | 说明 |
628
+ |------|------|
629
+ | `cad_pool_discover` | 发现所有 CAD 实例 |
630
+ | `cad_pool_switch` | 切换活动 CAD 实例 |
631
+ | `cad_pool_health` | 检查所有实例健康状态 |
632
+ | `cad_pool_stats` | 获取连接池统计 |
317
633
 
318
634
  ---
319
635
 
320
- ## 七、MCP 资源 (11 个)
636
+ ## MCP 资源
637
+
638
+ ### 静态资源 (13)
321
639
 
322
640
  | URI | 名称 | 说明 | 可订阅 |
323
641
  |-----|------|------|--------|
324
642
  | `atlisp://cad/info` | CAD Info | CAD 连接信息 | ✓ |
325
- | `atlisp://dwg/layers` | Layers | 图层列表 | ✓ |
326
643
  | `atlisp://dwg/entities` | Entities | 实体列表/统计 | ✓ |
327
- | `atlisp://dwg/texts` | Texts | 文本实体列表 | ✓ |
644
+ | `atlisp://dwg/text-content` | Text Content | 文字内容与位置 | ✓ |
645
+ | `atlisp://dwg/text-combined` | Combined Text | 合并后的段落文本 | ✓ |
328
646
  | `atlisp://dwg/name` | DWG Name | 当前文件名 | ✓ |
329
647
  | `atlisp://dwg/path` | DWG Path | 文件完整路径 | ✓ |
648
+ | `atlisp://dwg/block-refs` | Block References | 块参照与属性 | ✓ |
649
+ | `atlisp://dwg/tbl` | Tables | CAD 表数据 | ✓ |
330
650
  | `atlisp://cad/dwgs` | DWG List | 所有打开的 DWG | ✓ |
331
651
  | `atlisp://packages` | Packages | 已安装包列表 | ✓ |
332
- | `atlisp://platforms` | Platforms | 支持的平台信息 | ✗ |
333
- | `atlisp://standards/drafting` | Drafting Standards | CAD 制图规范 | ✗ |
334
- | `atlisp://standards/coding` | Coding Standards | @lisp 编码规范 | ✗ |
652
+ | `atlisp://platforms` | Platforms | 支持的平台 | ✗ |
653
+ | `atlisp://standards/drafting` | Drafting | CAD 制图规范 | ✗ |
654
+ | `atlisp://standards/coding` | Coding | @lisp 编码规范 | ✗ |
335
655
 
336
- ### 资源参数过滤
337
-
338
- ```
339
- atlisp://dwg/entities # 返回实体统计(类型+数量)
340
- atlisp://dwg/entities?type=LINE # 返回 LINE 类型实体列表
341
- atlisp://dwg/entities?layer=0 # 返回 0 图层实体列表
342
- atlisp://dwg/entities?bbox=0,0,100,100 # 返回区域内的实体列表
343
- atlisp://dwg/texts?layer=0&limit=100 # 分页获取文本
344
- atlisp://dwg/layers?name=0 # 查询特定图层
345
- atlisp://packages?name=base # 过滤包列表
346
- ```
347
-
348
- ### 资源模板 (5 个)
656
+ ### 资源模板
349
657
 
350
658
  | URI 模板 | 说明 |
351
- |---------|------|
352
- | `atlisp://dwg/entity/{handle}` | 按句柄查询实体详情 |
353
- | `atlisp://dwg/entities?type={type}` | 按类型查询实体 |
354
- | `atlisp://dwg/layers?name={name}` | 按名称查询图层 |
659
+ |----------|------|
660
+ | `atlisp://dwg/entity/{handle}` | 按句柄查实体详情 |
661
+ | `atlisp://dwg/entities?type={type}&layer={layer}&bbox={bbox}` | 过滤实体 |
662
+ | `atlisp://dwg/block-refs/{blockName}` | 按块名过滤块参照 |
663
+ | `atlisp://dwg/tbl/{table}` | 查询表(layer/block/textstyle/dimstyle/linetype/ucs/view/viewport/regapp/plotstyle) |
664
+ | `atlisp://dwg/text-content?bbox={bbox}&layer={layer}&offset={offset}&limit={limit}` | 分页文字 |
355
665
  | `atlisp://packages?search={query}` | 搜索包 |
356
- | `atlisp://dwg/texts?layer={layer}&offset={offset}&limit={limit}` | 分页获取文本 |
357
666
 
358
- ### MCP 根目录 (Roots) - 2 个
667
+ ### MCP 根目录 (Roots)
359
668
 
360
- | URI | 名称 | 说明 |
361
- |-----|------|------|
362
- | `file://~/@lisp` | @lisp 根目录 | @lisp 工作目录 |
363
- | `file://~/@lisp/projects` | 项目目录 | 存放 DWG 文件的项目文件夹 |
669
+ | URI | 说明 |
670
+ |-----|------|
671
+ | `file://~/.atlisp` | @lisp 工作目录 |
672
+ | `file://~/.atlisp/projects` | 项目目录 |
364
673
 
365
- ### MCP 方法
674
+ ---
366
675
 
367
- | 方法 | 说明 |
368
- |------|------|
369
- | `initialize` | 初始化连接 |
370
- | `roots/list` | 列出根目录 |
371
- | `tools/list` | 列出工具 |
372
- | `tools/call` | 调用工具 |
373
- | `resources/list` | 列出资源 |
374
- | `resources/read` | 读取资源 |
375
- | `resources/subscribe` | 订阅资源变更 |
376
- | `resources/unsubscribe` | 取消订阅 |
377
- | `prompts/list` | 列出提示模板 |
378
- | `prompts/get` | 获取提示模板 |
379
-
380
- ### 资源访问示例
676
+ ## MCP Prompts (16)
677
+
678
+ | Prompt | 功能 | 参数 |
679
+ |--------|------|------|
680
+ | `excel-report` | Excel 报表导出 | visible, savePath |
681
+ | `geometry-calc` | 几何计算 | action, points |
682
+ | `generate-dimension` | 生成尺寸标注 | style |
683
+ | `analyze-drawing` | 分析当前图纸统计 | — |
684
+ | `coding-conventions` | AutoLISP 编码规范 | — |
685
+ | `string-process` | 字符串处理 | action, input |
686
+ | `json-exchange` | JSON 数据交换 | action, data |
687
+ | `color-convert` | 颜色转换 | action, value |
688
+ | `pickset-filter` | 选择集操作 | action, dxfType, layerName |
689
+ | `text-process` | 文本处理 | action, markdown |
690
+ | `curve-analysis` | 曲线分析 | action, distance |
691
+ | `manage-blocks` | 块操作 | action, blockName |
692
+ | `manage-layers` | 图层管理 | action, layers |
693
+ | `export-entities` | 导出实体统计 | format |
694
+ | `batch-draw-lines` | 批量画线段 | count, length |
695
+ | `draw-residential` | 农村民居平面图 | width, depth, rooms |
696
+ | `draw-floor-plan` | 建筑楼层平面图 | floor, scale |
381
697
 
382
- ```json
383
- {
384
- "jsonrpc": "2.0",
385
- "id": 1,
386
- "method": "resources/read",
387
- "params": {
388
- "uri": "atlisp://dwg/entities"
389
- }
390
- }
391
- ```
698
+ ---
392
699
 
393
- 返回实体统计:
394
- ```json
395
- {
396
- "contents": [{
397
- "uri": "atlisp://dwg/entities",
398
- "mimeType": "application/json",
399
- "text": "{\"total\":150,\"summary\":[{\"type\":\"LWPOLYLINE\",\"count\":45},{\"type\":\"LINE\",\"count\":32}]}"
400
- }]
401
- }
402
- ```
700
+ ## HTTP API 端点
701
+
702
+ | 方法 | 路径 | 说明 |
703
+ |------|------|------|
704
+ | `GET` | `/health` | 健康检查 |
705
+ | `GET` | `/metrics` | Prometheus 指标 |
706
+ | `POST` | `/mcp` | MCP JSON-RPC |
707
+ | `GET` | `/mcp` | MCP 信息 |
708
+ | `GET` | `/sse` | SSE 长连接端点 |
709
+ | `POST` | `/message` | SSE 消息发送 |
710
+ | `WS` | `/ws` | WebSocket 端点 |
711
+ | `POST` | `/config/reload` | 热重载配置 |
712
+ | `GET` | `/rate-limit/status` | 速率限制状态 |
713
+ | `POST` | `/rate-limit/reset` | 重置速率限制 |
714
+ | `GET` | `/api/docs` | API 文档页面 |
715
+ | `GET` | `/debug` | 调试面板 |
716
+ | `GET` | `/playground` | 工具游乐场 |
403
717
 
404
718
  ---
405
719
 
406
- ## 八、环境变量
720
+ ## 环境变量
407
721
 
408
722
  | 变量 | 默认值 | 说明 |
409
723
  |------|--------|------|
410
- | `TRANSPORT` | `http` | 传输模式:`http` `stdio` |
411
- | `PORT` | `8110` | HTTP 模式监听端口 |
412
- | `HOST` | `0.0.0.0` | HTTP 模式监听地址 |
413
- | `MESSAGE_TIMEOUT` | `60000` | 消息超时(毫秒) |
414
- | `MCP_API_KEY` | (无) | API Key 认证(可选) |
415
- | `ENABLE_SSE` | `true` | 启用 SSE 模式(默认启用) |
416
-
417
- ### 启用 SSE 模式
418
-
419
- SSE (Server-Sent Events) 模式默认启用,提供长连接推送能力,适合需要实时响应的场景。
724
+ | `PORT` | `8110` | HTTP 端口 |
725
+ | `HOST` | `0.0.0.0` | HTTP 监听地址 |
726
+ | `TRANSPORT` | `http` | 传输模式: http/stdio/ws |
727
+ | `MCP_API_KEY` | | API Key 认证 |
728
+ | `ENABLE_SSE` | `true` | 启用 SSE |
729
+ | `MESSAGE_TIMEOUT` | `60000` | 消息超时 (ms) |
730
+ | `HEARTBEAT_INTERVAL` | `30000` | 心跳间隔 (ms) |
731
+ | `BUSY_RETRIES` | `10` | CAD 忙重试次数 |
732
+ | `BUSY_DELAY` | `500` | 重试延迟 (ms) |
733
+ | `ENABLE_CORS` | `true` | 启用 CORS |
734
+ | `CORS_ORIGIN` | `*` | CORS 源 |
735
+ | `RATE_LIMIT_WINDOW` | `60000` | 速率限制窗口 (ms) |
736
+ | `RATE_LIMIT_MAX` | `100` | 窗口内最大请求数 |
737
+ | `RESOURCE_CACHE_TTL` | `5000` | 资源缓存 TTL (ms) |
738
+ | `FUNCTION_LIB_CACHE_TTL` | `300000` | 函数库缓存 TTL (ms) |
739
+ | `DEBUG` | `false` | 调试模式 |
740
+ | `DEBUG_FILE` | — | 调试日志文件路径 |
741
+ | `FUNCTION_LIB_URL` | `http://s3.atlisp.cn/json/functions.json` | 函数库 URL |
742
+ | `CONFIG_FILE` | `~/.atlisp/atlisp.config.json` | 配置文件路径 |
743
+ | `METRICS_ENABLED` | `true` | 启用 /metrics 端点 |
744
+ | `REQUEST_LOG_ENABLED` | `true` | 启用请求日志 |
745
+ | `SSL_KEY_PATH` | — | SSL 私钥文件 |
746
+ | `SSL_CERT_PATH` | — | SSL 证书文件 |
747
+ | `LLM_API_KEY` | — | LLM API Key (sampling) |
748
+ | `LLM_API_URL` | `https://api.openai.com/v1/chat/completions` | LLM API URL |
749
+ | `LLM_MODEL` | `gpt-4o-mini` | LLM 模型 |
750
+ | `LLM_MAX_TOKENS` | `4096` | LLM 最大 tokens |
751
+ | `LLM_TEMPERATURE` | `0.7` | LLM 温度 |
752
+ | `API_KEY_RATE_LIMIT` | `1000` | API Key 速率限制 |
420
753
 
421
- **禁用 SSE:**
754
+ ---
422
755
 
423
- ```bash
424
- # Windows PowerShell
425
- $env:ENABLE_SSE="false"; atlisp-mcp
756
+ ## 命令行参数
426
757
 
427
- # 或命令行
428
- ENABLE_SSE=false atlisp-mcp
429
- ```
758
+ | 参数 | 说明 |
759
+ |------|------|
760
+ | `--port <number>` | HTTP 端口 |
761
+ | `--host <address>` | HTTP 主机地址 |
762
+ | `--transport <mode>` | 传输模式 (http/stdio/ws) |
763
+ | `--stdio` | 等价于 `--transport stdio` |
764
+ | `--ws` | 等价于 `--transport ws` |
765
+ | `--config <path>` | 配置文件路径 |
766
+ | `--ssl-key <path>` | SSL 私钥文件 |
767
+ | `--ssl-cert <path>` | SSL 证书文件 |
430
768
 
431
- **SSE 端点:**
769
+ ---
432
770
 
433
- | 端点 | 方法 | 说明 |
434
- |------|------|------|
435
- | `/sse` | GET | 建立 SSE 连接,返回消息端点 `/message` |
436
- | `/mcp/sse` | GET | 同上 |
437
- | `/message` | POST | 发送 JSON-RPC 请求,响应通过 SSE 推送 |
771
+ ## 配置文件
438
772
 
439
- **SSE 连接流程:**
773
+ 配置文件位于 `~/.atlisp/atlisp.config.json`,支持以下字段:
440
774
 
775
+ ```json
776
+ {
777
+ "port": 8110,
778
+ "host": "0.0.0.0",
779
+ "transport": "http",
780
+ "apiKey": "your-api-key",
781
+ "enableSse": true,
782
+ "messageTimeout": 60000,
783
+ "heartbeatInterval": 30000,
784
+ "enableCors": true,
785
+ "corsOrigin": "*",
786
+ "rateLimitWindow": 60000,
787
+ "rateLimitMax": 100,
788
+ "debug": false,
789
+ "metricsEnabled": true,
790
+ "requestLogEnabled": true,
791
+ "maxPoolSize": 3,
792
+ "apiKeys": [
793
+ { "key": "key1", "limit": 100, "name": "user1", "role": "admin" }
794
+ ],
795
+ "sslKey": "/path/to/key.pem",
796
+ "sslCert": "/path/to/cert.pem",
797
+ "llmApiKey": "sk-xxx",
798
+ "llmApiUrl": "https://api.openai.com/v1/chat/completions",
799
+ "llmModel": "gpt-4o-mini",
800
+ "llmMaxTokens": 4096,
801
+ "llmTemperature": 0.7
802
+ }
441
803
  ```
442
- 1. 客户端 → GET /sse
443
- Header: Accept: text/event-stream
444
-
445
- 2. 服务器 → 返回 SSE 流,包含:
446
- event: endpoint
447
- data: {"path": "/message"}
448
- event: capabilities
449
- data: {...}
450
-
451
- 3. 客户端 → POST /message
452
- Header: mcp-session-id: <session-id>
453
- Body: {"jsonrpc":"2.0","id":1,"method":"tools/call",...}
454
-
455
- 4. 服务器 → 通过 SSE 推送响应:
456
- event: message
457
- data: {"jsonrpc":"2.0","id":1,"result":{...}}
458
- ```
459
-
460
- ---
461
-
462
- ## 九、支持平台
463
804
 
464
- - **AutoCAD** (扩展名: `.fas`, `.vlx`)
465
- - **ZWCAD** (扩展名: `.zelx`, `.vls`)
466
- - **GStarCAD** (扩展名: `.des`)
467
- - **BricsCAD** (扩展名: `.des`)
805
+ 配置变更会自动热重载。
468
806
 
469
807
  ---
470
808
 
471
- ## 十、工作原理
809
+ ## 架构与开发
472
810
 
473
- 1. MCP Server 通过 `edge-js` 调用 .NET 代码
474
- 2. .NET 通过 COM 互操作连接 CAD 应用程序
475
- 3. 支持获取运行中的 CAD 或自动启动
476
- 4. 通过 `SendCommand` 向 CAD 发送 LISP 代码
477
- 5. 执行前自动检测 CAD 状态(IsQuiescent)
478
- 6. CAD 忙碌时自动等待(最多 10 次重试)
811
+ 架构图、项目结构、开发指南请参见 [`DEV.md`](DEV.md)。
479
812
 
480
813
  ---
481
814
 
482
- ## 十一、故障排除
815
+ ## 故障排除
483
816
 
484
817
  | 问题 | 解决方案 |
485
818
  |------|---------|
486
819
  | 连接失败 | 确保 CAD 已启动并启用 COM 接口 |
487
- | 工具调用超时 | CAD 可能繁忙,稍后重试 |
488
- | 中文乱码 | 使用 `vl-prin1-to-string` 处理 |
820
+ | 工具调用超时 | CAD 可能繁忙,稍后重试;增大 `MESSAGE_TIMEOUT` |
821
+ | 中文乱码 | 使用 `encoding: gbk` 参数或用 `vl-prin1-to-string` 处理 |
489
822
  | 括号错误 | MCP Server 会自动检查并提示 |
823
+ | CAD 未自动启动 | 检查 COM 权限,以管理员身份运行 |
824
+ | 端口被占用 | 使用 `--port` 指定其他端口 |
825
+ | 全局命令找不到 | 检查 npm 全局安装路径是否在 PATH 中 |
490
826
 
491
827
  ---
492
828
 
493
829
  ## 许可证
494
830
 
495
- ISC
831
+ ISC