@atlisp/mcp 1.0.17 → 1.0.18

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,21 +1,18 @@
1
1
  # @lisp MCP Server
2
2
 
3
- MCP (Model Context Protocol) Server for @lisp on CAD - 为 CAD 环境提供 @lisp 包管理服务的 MCP 服务器。
4
-
5
- 同时为 AI AGENT 操控 cad 提供调用工具和通道。
3
+ MCP (Model Context Protocol) Server for @lisp on CAD - 为 CAD 环境提供 @lisp 包管理服务的 MCP 服务器,同时为 AI AGENT 操控 CAD 提供调用工具和通道。
6
4
 
7
5
  ## 功能特性
8
6
 
9
7
  - 连接 AutoCAD/ZWCAD/GStarCAD/BricsCAD
10
- - 执行 AutoLISP 代码
11
- - 获取 CAD 平台信息
12
- - 通过 MCP 协议提供标准化接口
8
+ - 执行 AutoLISP 代码,支持绘图、查询、标注
9
+ - AI Agent 可通过 MCP 协议控制 CAD 绘图
13
10
  - 管理 @lisp 包(列出、搜索、安装)
14
- - 自动检测 CAD 状态(忙碌/空闲)
15
- - CAD 无文档时自动处理
11
+ - CAD 未运行自动启动
16
12
 
13
+ ---
17
14
 
18
- ## 安装
15
+ ## 一、安装
19
16
 
20
17
  ### Windows (PowerShell)
21
18
 
@@ -23,71 +20,44 @@ MCP (Model Context Protocol) Server for @lisp on CAD - 为 CAD 环境提供 @lis
23
20
  iwr -useb https://atlisp.cn/install.ps1 | iex
24
21
  ```
25
22
 
26
- ### macOS / Linux
23
+ 安装脚本会自动:
24
+ - 安装 Node.js(如未安装)
25
+ - 全局安装 `@atlisp/mcp` 包
26
+ - 创建命令 `atlisp-mcp`
27
27
 
28
- ```bash
29
- npm i -g @atlisp/mcp
28
+ ### 验证安装
29
+
30
+ ```powershell
31
+ atlisp-mcp --version
30
32
  ```
31
33
 
32
- ## 使用方法
34
+ ---
33
35
 
34
- ### Agent MCP 配置
36
+ ## 二、配置 AI Agent (WorkBuddy / Claude Desktop)
35
37
 
36
- #### OpenHands / OpenDeepResearcher
38
+ ### WorkBuddy 配置
37
39
 
38
- 在配置中添加:
40
+ 在 `~/.workbuddy/.mcp.json` 中添加:
39
41
 
40
42
  ```json
41
43
  {
42
- "mcp_servers": {
44
+ "mcpServers": {
43
45
  "atlisp-mcp": {
44
- "command": "atlisp-mcp",
45
- "args": [],
46
- "env": {
47
- "TRANSPORT": "stdio"
48
- }
46
+ "url": "http://localhost:8110/mcp"
49
47
  }
50
48
  }
51
49
  }
52
50
  ```
53
51
 
54
- #### OpenClaude
55
-
56
- 在配置文件中添加:
57
-
58
- ```yaml
59
- mcp_servers:
60
- atlisp-mcp:
61
- command: atlisp-mcp
62
- env:
63
- TRANSPORT: stdio
64
- ```
65
-
66
- #### Hermes (Claude 独立版)
52
+ ### Claude Desktop 配置
67
53
 
68
- Hermes 设置中找到 MCP Server 配置,添加:
69
-
70
- ```json
71
- {
72
- "name": "atlisp-mcp",
73
- "command": "atlisp-mcp",
74
- "args": [],
75
- "env": {
76
- "TRANSPORT": "stdio"
77
- }
78
- }
79
- ```
80
-
81
- #### Cline / Cursor / Windsurf
82
-
83
- 在这些 IDE 的 MCP 设置中添加:
54
+ `~/AppData/Roaming/Claude/claude_desktop_config.json` 中添加:
84
55
 
85
56
  ```json
86
57
  {
87
58
  "mcpServers": {
88
59
  "atlisp-mcp": {
89
60
  "command": "atlisp-mcp",
90
- "args": [],
91
61
  "env": {
92
62
  "TRANSPORT": "stdio"
93
63
  }
@@ -96,144 +66,231 @@ mcp_servers:
96
66
  }
97
67
  ```
98
68
 
99
- #### 使用 HTTP 模式
100
-
101
- 如果 agent 不支持 stdio,可以改用 HTTP 模式:
69
+ ### 其他 AI Agent (Cline / Cursor / Windsurf)
102
70
 
103
71
  ```json
104
72
  {
105
73
  "mcpServers": {
106
74
  "atlisp-mcp": {
107
- "url": "http://localhost:8110/mcp"
75
+ "command": "atlisp-mcp",
76
+ "args": [],
77
+ "env": {
78
+ "TRANSPORT": "stdio"
79
+ }
108
80
  }
109
81
  }
110
82
  }
111
83
  ```
112
84
 
113
- ### 启动服务器
85
+ ---
86
+
87
+ ## 三、启动服务
88
+
89
+ ### HTTP 模式(默认,端口 8110)
114
90
 
115
- **同时支持HTTP 和studio模式**:
116
91
  ```bash
117
92
  atlisp-mcp
118
93
  ```
119
- ### 环境变量
120
94
 
121
- | 变量 | 默认值 | 说明 |
122
- |------|--------|------|
123
- | `TRANSPORT` | `http` | 传输模式:`http` `stdio` |
124
- | `PORT` | `8110` | HTTP 模式监听端口 |
125
- | `HOST` | `0.0.0.0` | HTTP 模式监听地址 |
126
- | `MESSAGE_TIMEOUT` | `60000` | 消息超时(毫秒) |
127
- | `BUSY_RETRIES` | `10` | CAD 忙碌时重试次数 |
128
- | `BUSY_DELAY` | `500` | CAD 忙碌重试间隔(毫秒) |
129
- | `MCP_API_KEY` | (无) | API Key 认证(可选) |
95
+ 服务启动后输出:
96
+ ```
97
+ @lisp MCP Server 启动 - http://0.0.0.0:8110 - Streamable HTTP
98
+ ```
130
99
 
131
- ### 运行测试
100
+ ### stdio 模式(AI Agent 直接调用)
132
101
 
133
102
  ```bash
134
- npm test
103
+ atlisp-mcp
104
+ # 环境变量
105
+ TRANSPORT=stdio
135
106
  ```
136
107
 
137
- 测试覆盖 54 个用例,包括:
138
- - 工具定义完整性
139
- - 连接/断开 CAD
140
- - 执行 LISP 代码
141
- - 包管理操作
142
- - 错误处理
143
-
144
- ## API
145
-
146
108
  ### 健康检查
147
109
 
148
110
  ```bash
149
111
  curl http://localhost:8110/health
150
112
  ```
151
113
 
152
- 返回:
114
+ 返回 `{"status":"ok","cad":"connected"}` 表示服务正常。
115
+
116
+ ---
117
+
118
+ ## 四、连接 CAD
119
+
120
+ ### 前置条件
121
+
122
+ - Windows 系统
123
+ - CAD 软件已安装(AutoCAD / ZWCAD / GStarCAD / BricsCAD)
124
+ - CAD 已启动(或配置为自动启动)
125
+
126
+ ### 连接方式
127
+
128
+ 使用 MCP 工具 `connect_cad` 连接 CAD:
129
+
153
130
  ```json
154
- {"status":"ok","cad":"connected"}
131
+ {
132
+ "name": "connect_cad",
133
+ "arguments": {}
134
+ }
155
135
  ```
156
136
 
157
- ### MCP 端点
137
+ **自动行为**:
138
+ - 如果 CAD 已运行,连接现有实例
139
+ - 如果 CAD 未运行,通过 COM 自动创建新实例
158
140
 
159
- HTTP 模式:`POST http://localhost:8110/mcp`
141
+ 连接成功返回: `已连接到 AutoCAD 2021`
160
142
 
161
- ## 可用工具
143
+ ---
162
144
 
163
- | 工具名称 | 描述 | 参数 |
164
- |---------|------|------|
165
- | `connect_cad` | 连接到 CAD | 无 |
166
- | `eval_lisp` | 在 CAD 中执行 AutoLISP 代码(不返回结果) | `code`: 字符串 |
167
- | `eval_lisp_with_result` | 在 CAD 中执行 AutoLISP 代码并返回结果 | `code`: 字符串 |
168
- | `get_cad_info` | 获取当前 CAD 信息 | 无 |
169
- | `list_packages` | 列出已安装的 @lisp 包 | 无 |
170
- | `search_packages` | 搜索 @lisp 包 | `query`: 搜索关键词 |
171
- | `install_package` | 安装 @lisp 包到 CAD | `packageName`: 包名称 |
172
- | `get_platform_info` | 获取 CAD 平台信息 | 无 |
173
- | `get_file_extensions` | 获取指定平台的文件扩展名 | `platform`: 平台名称 |
174
- | `get_install_code` | 获取 @lisp 安装代码 | 无 |
175
- | `at_command` | 执行 @lisp 命令 | `command`: 命令 |
176
- | `new_document` | 在 CAD 中新建空白文档 | 无 |
177
- | `install_atlisp` | 在 CAD 中安装 @lisp | 无 |
145
+ ## 五、绘图示例
146
+
147
+ ### 1. 画直线
178
148
 
179
- ## 支持的平台
149
+ ```json
150
+ {
151
+ "name": "eval_lisp",
152
+ "arguments": {
153
+ "code": "(command \"_.LINE\" \"0,0\" \"100,100\" \"\")"
154
+ }
155
+ }
156
+ ```
180
157
 
181
- - **AutoCAD** (文件扩展名: `.fas`, `.vlx`)
182
- - **ZWCAD** (文件扩展名: `.zelx`, `.vls`)
183
- - **GStarCAD** (文件扩展名: `.des`)
184
- - **BricsCAD** (文件扩展名: `.des`)
158
+ ### 2. 画矩形
185
159
 
186
- ## 工作原理
160
+ ```json
161
+ {
162
+ "name": "eval_lisp",
163
+ "arguments": {
164
+ "code": "(command \"_.RECTANG\" \"0,0\" \"100,100\")"
165
+ }
166
+ }
167
+ ```
187
168
 
188
- 1. MCP Server 通过 `edge-js` 调用 .NET 代码
189
- 2. .NET 代码通过 COM 互操作连接 CAD 应用程序
190
- 3. 支持获取活动 CAD 实例或启动新实例
191
- 4. 通过 `SendCommand` 方法向 CAD 发送 LISP 代码
192
- 5. 执行命令前自动检测 CAD 状态(IsQuiescent)
193
- 6. CAD 忙碌时自动等待(最多 10 次重试)
194
- 7. CAD 无打开文档时返回错误
169
+ ### 3. 画圆
195
170
 
196
- ## 示例
171
+ ```json
172
+ {
173
+ "name": "eval_lisp",
174
+ "arguments": {
175
+ "code": "(command \"_.CIRCLE\" \"50,50\" \"25\")"
176
+ }
177
+ }
178
+ ```
197
179
 
198
- ### 连接 CAD
180
+ ### 4. 写文字
199
181
 
200
- ```bash
201
- curl -X POST http://localhost:8110/mcp \
202
- -H "Content-Type: application/json" \
203
- -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"connect_cad","arguments":{}}}'
182
+ ```json
183
+ {
184
+ "name": "eval_lisp",
185
+ "arguments": {
186
+ "code": "(entmake (list (cons 0 \"TEXT\") (cons 10 (list 0 0 0)) (cons 40 5) (cons 1 \"标题\")))"
187
+ }
188
+ }
204
189
  ```
205
190
 
206
- ### 执行 LISP 代码
191
+ ### 5. 获取查询结果
207
192
 
208
- ```bash
209
- curl -X POST http://localhost:8110/mcp \
210
- -H "Content-Type: application/json" \
211
- -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"eval_lisp","arguments":{"code":"(getvar \"acadver\")"}}}'
193
+ ```json
194
+ {
195
+ "name": "eval_lisp_with_result",
196
+ "arguments": {
197
+ "code": "(getvar \"acadver\")"
198
+ }
199
+ }
212
200
  ```
213
201
 
214
- ### 搜索包
202
+ 返回 CAD 版本号,如 "AC1027"
215
203
 
216
- ```bash
217
- curl -X POST http://localhost:8110/mcp \
218
- -H "Content-Type: application/json" \
219
- -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"search_packages","arguments":{"query":"base"}}}'
204
+ ### 6. 统计图形数量
205
+
206
+ ```json
207
+ {
208
+ "name": "eval_lisp_with_result",
209
+ "arguments": {
210
+ "code": "(sslength (ssget \"_X\"))"
211
+ }
212
+ }
220
213
  ```
221
214
 
222
- ### 新建文档
215
+ ### 7. 切换 CAD 到前台
223
216
 
224
- ```bash
225
- curl -X POST http://localhost:8110/mcp \
226
- -H "Content-Type: application/json" \
227
- -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"new_document","arguments":{}}}'
217
+ 当 CAD 在后台运行时,唤醒到前台:
218
+
219
+ ```json
220
+ {
221
+ "name": "bring_to_front",
222
+ "arguments": {}
223
+ }
228
224
  ```
229
225
 
230
- ## 注意事项
226
+ ---
227
+
228
+ ## 六、可用工具列表
229
+
230
+ | 工具名称 | 描述 | 参数 |
231
+ |---------|------|------|
232
+ | `connect_cad` | 连接到 CAD | 无 |
233
+ | `eval_lisp` | 执行 LISP 代码(无返回值) | `code`: LISP 代码 |
234
+ | `eval_lisp_with_result` | 执行 LISP 并返回结果 | `code`: LISP 代码 |
235
+ | `get_cad_info` | 获取 CAD 信息 | 无 |
236
+ | `list_packages` | 列出已安装的包 | 无 |
237
+ | `search_packages` | 搜索包 | `query`: 关键词 |
238
+ | `install_package` | 安装包 | `packageName`: 包名 |
239
+ | `get_platform_info` | 获取平台信息 | 无 |
240
+ | `get_file_extensions` | 获取文件扩展名 | `platform`: 平台名 |
241
+ | `get_install_code` | 获取安装代码 | 无 |
242
+ | `at_command` | 执行 @lisp 命令 | `command`: 命令 |
243
+ | `new_document` | 新建空白文档 | 无 |
244
+ | `bring_to_front` | 切换 CAD 到前台 | 无 |
245
+ | `install_atlisp` | 安装 @lisp | 无 |
246
+ | `get_function_usage` | 获取函数用法 | `name`: 函数名 |
247
+ | `list_functions` | 列出所有函数 | 无 |
248
+
249
+ ---
250
+
251
+ ## 七、环境变量
252
+
253
+ | 变量 | 默认值 | 说明 |
254
+ |------|--------|------|
255
+ | `TRANSPORT` | `http` | 传输模式:`http` 或 `stdio` |
256
+ | `PORT` | `8110` | HTTP 模式监听端口 |
257
+ | `HOST` | `0.0.0.0` | HTTP 模式监听地址 |
258
+ | `MESSAGE_TIMEOUT` | `60000` | 消息超时(毫秒) |
259
+ | `MCP_API_KEY` | (无) | API Key 认证(可选) |
260
+
261
+ ---
262
+
263
+ ## 八、支持平台
264
+
265
+ - **AutoCAD** (扩展名: `.fas`, `.vlx`)
266
+ - **ZWCAD** (扩展名: `.zelx`, `.vls`)
267
+ - **GStarCAD** (扩展名: `.des`)
268
+ - **BricsCAD** (扩展名: `.des`)
269
+
270
+ ---
271
+
272
+ ## 九、工作原理
273
+
274
+ 1. MCP Server 通过 `edge-js` 调用 .NET 代码
275
+ 2. .NET 通过 COM 互操作连接 CAD 应用程序
276
+ 3. 支持获取运行中的 CAD 或自动启动
277
+ 4. 通过 `SendCommand` 向 CAD 发送 LISP 代码
278
+ 5. 执行前自动检测 CAD 状态(IsQuiescent)
279
+ 6. CAD 忙碌时自动等待(最多 10 次重试)
280
+
281
+ ---
282
+
283
+ ## 十、故障排除
284
+
285
+ | 问题 | 解决方案 |
286
+ |------|---------|
287
+ | 连接失败 | 确保 CAD 已启动并启用 COM 接口 |
288
+ | 工具调用超时 | CAD 可能繁忙,稍后重试 |
289
+ | 中文乱码 | 使用 `vl-princ-to-string` 处理 |
290
+ | 括号错误 | MCP Server 会自动检查并提示 |
231
291
 
232
- - 仅支持 Windows 平台(依赖 COM 互操作)
233
- - 需要安装对应的 CAD 软件
234
- - CAD 必须正在运行或可被启动
235
- - 某些操作可能需要以管理员权限运行
292
+ ---
236
293
 
237
294
  ## 许可证
238
295
 
239
- ISC
296
+ ISC
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlisp/mcp",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "description": "MCP Server for @lisp on CAD",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { spawn } from 'child_process';
3
3
  import path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
+ import { SERVER_VERSION } from './constants.js';
5
6
 
6
7
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
8
  const serverPath = path.join(__dirname, 'atlisp-mcp.js');
@@ -10,7 +11,10 @@ const args = process.argv.slice(2);
10
11
  const env = { ...process.env };
11
12
 
12
13
  for (let i = 0; i < args.length; i++) {
13
- if (args[i] === '--transport' && args[i + 1]) {
14
+ if (args[i] === '--version' || args[i] === '-v') {
15
+ console.log(`atlisp-mcp v${SERVER_VERSION}`);
16
+ process.exit(0);
17
+ } else if (args[i] === '--transport' && args[i + 1]) {
14
18
  env.TRANSPORT = args[i + 1];
15
19
  i++;
16
20
  } else if (args[i] === '--port' && args[i + 1]) {
@@ -23,11 +27,12 @@ for (let i = 0; i < args.length; i++) {
23
27
  env.TRANSPORT = 'stdio';
24
28
  } else if (args[i] === '--help' || args[i] === '-h') {
25
29
  console.log(`
26
- @lisp MCP Server
30
+ @lisp MCP Server v${SERVER_VERSION}
27
31
 
28
32
  Usage: atlisp-mcp [options]
29
33
 
30
34
  Options:
35
+ -v, --version Show version number
31
36
  --transport <type> Transport type: http or stdio (default: http)
32
37
  --port <port> HTTP port (default: 8110)
33
38
  --host <host> HTTP host (default: 0.0.0.0)
package/src/constants.js CHANGED
@@ -7,7 +7,7 @@ export const FILE_EXTENSIONS = {
7
7
 
8
8
  export const PROTOCOL_VERSION = '2024-11-05';
9
9
  export const SERVER_NAME = 'atlisp-mcp-server';
10
- export const SERVER_VERSION = '1.0.17';
10
+ export const SERVER_VERSION = '1.0.18';
11
11
 
12
12
  export const MOCK_PACKAGES = [
13
13
  { name: 'base', description: '基础函数库', version: '1.0.0' },