@codify-ai/mcp-client 1.0.27 → 1.0.29
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 +99 -100
- package/dist/index.js +27 -30
- package/dist/rules.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|

|
|
7
7
|

|
|
8
8
|
|
|
9
|
-
**Codify MCP 客户端 - 连接
|
|
9
|
+
**Codify MCP 客户端 - 连接 MasterGo 和 IDE / CLI 的桥梁**
|
|
10
10
|
|
|
11
11
|
通过 MCP 协议从远程 Codify 服务器获取代码
|
|
12
12
|
|
|
13
|
-
[快速开始](#快速开始) · [
|
|
13
|
+
[快速开始](#快速开始) · [功能特性](#功能特性) · [可用工具](#可用工具) · [Codify 仪表盘](https://codify.fun)
|
|
14
14
|
|
|
15
15
|
</div>
|
|
16
16
|
|
|
@@ -21,33 +21,25 @@
|
|
|
21
21
|
- 🔌 **一键安装**:使用 `npx` 无需手动下载
|
|
22
22
|
- 📡 **MCP 协议**:完美集成 Cursor 等支持 MCP 的 IDE
|
|
23
23
|
- 🔐 **安全认证**:支持 access_key 认证
|
|
24
|
-
- 🛠️
|
|
25
|
-
- 📦 **资源访问**:通过 URI `Codify://
|
|
26
|
-
|
|
27
|
-
## 架构说明
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
Figma Plugin (WebSocket)
|
|
31
|
-
↓
|
|
32
|
-
Codify MCP Server (远程)
|
|
33
|
-
↓
|
|
34
|
-
@codify-ai/mcp-client (本包)
|
|
35
|
-
↓
|
|
36
|
-
Cursor IDE (本地)
|
|
37
|
-
```
|
|
24
|
+
- 🛠️ **全能工具箱**:包含代码获取、设计稿生成、双向同步等 10+ 个专业工具
|
|
25
|
+
- 📦 **资源访问**:通过 URI `Codify://get_code/{content_id}` 访问代码
|
|
38
26
|
|
|
39
27
|
## 快速开始
|
|
40
28
|
|
|
41
|
-
### 1. 配置
|
|
29
|
+
### 1. 配置 MCP
|
|
42
30
|
|
|
43
|
-
|
|
31
|
+
例如:编辑 `~/.cursor/mcp.json`(如果文件不存在则创建):
|
|
44
32
|
|
|
45
33
|
```json
|
|
46
34
|
{
|
|
47
35
|
"mcpServers": {
|
|
48
36
|
"codify": {
|
|
49
37
|
"command": "npx",
|
|
50
|
-
"args": [
|
|
38
|
+
"args": [
|
|
39
|
+
"-y",
|
|
40
|
+
"@codify-ai/mcp-client",
|
|
41
|
+
"--url=https://mcp.codify-api.com"
|
|
42
|
+
],
|
|
51
43
|
"env": {
|
|
52
44
|
"CODIFY_ACCESS_KEY": "sk-your-access-key"
|
|
53
45
|
}
|
|
@@ -56,126 +48,133 @@ Figma Plugin (WebSocket)
|
|
|
56
48
|
}
|
|
57
49
|
```
|
|
58
50
|
|
|
59
|
-
### 2. 重启
|
|
51
|
+
### 2. 重启IDE / CLI
|
|
60
52
|
|
|
61
|
-
重启
|
|
53
|
+
重启Cursor、VSCode、Trae 等 IDE 或者 CLI 工具,或重新加载 MCP 服务器配置。
|
|
62
54
|
|
|
63
55
|
### 3. 开始使用
|
|
64
56
|
|
|
65
|
-
在
|
|
57
|
+
在IDE / CLI 中,您可以:
|
|
66
58
|
|
|
67
|
-
#### 方式 1
|
|
59
|
+
#### 方式 1:将设计稿给其他人(研发)拉取代码到本地
|
|
68
60
|
|
|
69
|
-
|
|
61
|
+
在 Codify 插件中选中一个元素,复制的指令然后给到其他人来获取代码。
|
|
62
|
+
|
|
63
|
+
无需启动 MasterGo,直接在 IDE 中输入该指令即可获取代码。
|
|
70
64
|
|
|
71
65
|
```
|
|
72
|
-
|
|
66
|
+
codify://getCode/{contentId}
|
|
73
67
|
```
|
|
74
68
|
|
|
75
|
-
#### 方式 2
|
|
69
|
+
#### 方式 2:使用 AI 工具进行设计稿与代码的双向交互
|
|
76
70
|
|
|
77
|
-
|
|
71
|
+
直接在对话框输入指令,AI 会自动识别并调用工具:
|
|
78
72
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
- "获取 MasterGo 中选中的图层代码" (**get_selection_code**)
|
|
74
|
+
- "使用Codify **design** 工具设计一个深色模式的统计仪表盘" (**design**)
|
|
75
|
+
- "修改设计稿选中的图层,改为红色背景" (**agent_update_node**)
|
|
76
|
+
- "将我选中的图层删除" (**agent_remove_node**)
|
|
77
|
+
- "将我选中的图层,同步到本地代码" (**agent_sync_design**)
|
|
78
|
+
- "对比本地代码与设计稿的差异" (**get_design_diff**)
|
|
82
79
|
|
|
83
|
-
|
|
80
|
+
#### 方式 3:引用核心规范资源
|
|
84
81
|
|
|
85
|
-
|
|
82
|
+
在对话中通过或直接输入 URI 引用:
|
|
86
83
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
| `--help`, `-h` | 显示帮助信息 | - |
|
|
91
|
-
| `--version`, `-v` | 显示版本号 | - |
|
|
84
|
+
- `codify://generation-rules`
|
|
85
|
+
- 逆向转译与代码规范:
|
|
86
|
+
你需要让 LLM 严格遵守转译代码规范才能完美的将它转译为 MasterGo 设计稿。当你需要将你已有的前端项目转换为设计稿的时候,必须让 LLM 读取此文档。
|
|
92
87
|
|
|
93
|
-
|
|
88
|
+
- `codify://design-philosophy`
|
|
89
|
+
- 核心设计哲学:
|
|
90
|
+
Codify为你总结了一套非常实用的UI设计哲学,它能够让LLM在生成页面的时候,保持优秀的设计审美。
|
|
94
91
|
|
|
95
|
-
|
|
96
|
-
| ------------------- | ----------------------------- | ---- |
|
|
97
|
-
| `CODIFY_SERVER_URL` | 服务器地址(可被 --url 覆盖) | 否 |
|
|
98
|
-
| `CODIFY_ACCESS_KEY` | 访问密钥 | 是\* |
|
|
92
|
+
## 可用工具
|
|
99
93
|
|
|
100
|
-
|
|
94
|
+
### 🔍 获取与比对
|
|
101
95
|
|
|
102
|
-
|
|
96
|
+
#### **get_selection_code**
|
|
103
97
|
|
|
104
|
-
|
|
98
|
+
获取 MasterGo 中当前选中图层(或指定图层)的代码。支持根节点完整保存,以及子节点自动合并到本地基准 HTML 文件。
|
|
105
99
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
"mcpServers": {
|
|
109
|
-
"codify": {
|
|
110
|
-
"command": "npx",
|
|
111
|
-
"args": ["-y", "@codify/mcp-client", "--url=https://codify.example.com"],
|
|
112
|
-
"env": {
|
|
113
|
-
"CODIFY_ACCESS_KEY": "sk-abc123xyz789"
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
```
|
|
100
|
+
- **参数**: `projectDir` (必填), `targetNodeId` (可选), `syncToBase` (可选, 默认 true)
|
|
101
|
+
- **示例**: "获取当前选中图层的代码"
|
|
119
102
|
|
|
120
|
-
|
|
103
|
+
#### **get_design_diff**
|
|
121
104
|
|
|
122
|
-
|
|
123
|
-
{
|
|
124
|
-
"mcpServers": {
|
|
125
|
-
"codify": {
|
|
126
|
-
"command": "npx",
|
|
127
|
-
"args": ["-y", "@codify-api/mcp-client"],
|
|
128
|
-
"env": {
|
|
129
|
-
"CODIFY_SERVER_URL": "https://codify.example.com",
|
|
130
|
-
"CODIFY_ACCESS_KEY": "sk-abc123xyz789"
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
105
|
+
获取最新设计稿代码与本地 `.codify` 目录中旧代码的差异 (Diff)。用于全量或局部同步。
|
|
136
106
|
|
|
137
|
-
|
|
107
|
+
- **参数**: `projectDir` (必填), `targetNodeId` (可选), `filePath` (可选)
|
|
108
|
+
- **示例**: "对比最新设计稿,看看有哪些改动"
|
|
138
109
|
|
|
139
|
-
|
|
110
|
+
#### **get_code_list**
|
|
140
111
|
|
|
141
|
-
|
|
112
|
+
列出所有可用的代码列表。
|
|
142
113
|
|
|
143
|
-
|
|
114
|
+
- **参数**: 无
|
|
115
|
+
- **示例**: "查看我可以拉取的代码列表"
|
|
144
116
|
|
|
145
|
-
|
|
117
|
+
#### **get_code**
|
|
146
118
|
|
|
147
|
-
|
|
119
|
+
通过 `contentId` 获取特定代码并保存到本地。
|
|
148
120
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
```
|
|
121
|
+
- **参数**: `contentId` (必填), `projectDir` (必填), `outDir` (必填), `documentId` (可选)
|
|
122
|
+
- **示例**: "从频道 demo-123 获取代码"
|
|
152
123
|
|
|
153
|
-
###
|
|
124
|
+
### 🎨 生成与设计
|
|
154
125
|
|
|
155
|
-
|
|
126
|
+
#### **design**
|
|
156
127
|
|
|
157
|
-
|
|
128
|
+
根据自然语言需求生成符合 Codify 规范的 HTML+CSS 代码。
|
|
158
129
|
|
|
159
|
-
|
|
130
|
+
- **参数**: `requirement` (必填)
|
|
131
|
+
- **示例**: "帮我设计一个深色模式的登录页面"
|
|
160
132
|
|
|
161
|
-
|
|
162
|
-
AI,请使用 getCodeList 工具查看所有频道
|
|
163
|
-
```
|
|
133
|
+
#### **agent_create_page**
|
|
164
134
|
|
|
165
|
-
|
|
135
|
+
将生成的 HTML 代码发送到 MasterGo 插件并创建新页面。
|
|
166
136
|
|
|
167
|
-
|
|
137
|
+
- **参数**: `code` (可选), `filePath` (可选), `projectDir` (必填), `saveCodeToLocal` (可选)
|
|
138
|
+
- **示例**: "在 MasterGo 中创建一个新页面,代码在 ./temp.html"
|
|
168
139
|
|
|
169
|
-
|
|
170
|
-
codify://{content_id}/current
|
|
171
|
-
```
|
|
140
|
+
#### **agent_create_component**
|
|
172
141
|
|
|
173
|
-
|
|
142
|
+
创建一个 MasterGo 母版组件或组件集(变体)。
|
|
174
143
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
144
|
+
- **参数**: `code` (必填)
|
|
145
|
+
- **示例**: "将这段 HTML 创建为 MasterGo 组件"
|
|
146
|
+
|
|
147
|
+
### 🛠️ 操作与更新
|
|
148
|
+
|
|
149
|
+
#### **agent_update_node**
|
|
150
|
+
|
|
151
|
+
将修改后的 HTML 代码发回 MasterGo 进行局部更新。**注意:必须包含 `data-node-id`。**
|
|
152
|
+
|
|
153
|
+
- **参数**: `code` (必填), `targetNodeId` (可选), `documentId` (可选)
|
|
154
|
+
- **示例**: "更新选中的按钮颜色为蓝色"
|
|
155
|
+
|
|
156
|
+
#### **agent_sync_design**
|
|
157
|
+
|
|
158
|
+
将本地完整的静态 HTML 文件内容全量同步覆盖到 MasterGo 画布。
|
|
159
|
+
|
|
160
|
+
- **参数**: `filePath` (必填), `targetNodeId` (必填, 根节点 ID), `documentId` (可选)
|
|
161
|
+
- **示例**: "同步本地 index.html 到设计稿根节点"
|
|
162
|
+
|
|
163
|
+
#### **agent_remove_node**
|
|
164
|
+
|
|
165
|
+
在 MasterGo 中删除指定的或当前选中的图层。
|
|
166
|
+
|
|
167
|
+
- **参数**: `targetNodeId` (可选), `documentId` (可选)
|
|
168
|
+
- **示例**: "删除选中的图层"
|
|
169
|
+
|
|
170
|
+
### 👤 系统信息
|
|
171
|
+
|
|
172
|
+
#### **get_user_info**
|
|
173
|
+
|
|
174
|
+
查看当前登录用户信息、团队信息以及配额使用情况。
|
|
175
|
+
|
|
176
|
+
- **参数**: 无
|
|
177
|
+
- **示例**: "查看我的配额还剩多少"
|
|
179
178
|
|
|
180
179
|
## 许可证
|
|
181
180
|
|
package/dist/index.js
CHANGED
|
@@ -92,7 +92,6 @@ async function writeResource(resData, targetDir, folderName, ext) {
|
|
|
92
92
|
const response = await axios.get(content, { responseType: "arraybuffer" });
|
|
93
93
|
await fs.writeFile(filePath, response.data);
|
|
94
94
|
} catch (err) {
|
|
95
|
-
console.error(`[Codify MCP] 资源下载失败 ${content}:`, err.message);
|
|
96
95
|
}
|
|
97
96
|
} else if (typeof content === "string" && content.startsWith("data:image/")) {
|
|
98
97
|
const parts = content.split(";base64,");
|
|
@@ -140,14 +139,15 @@ async function saveCodeAndResources({
|
|
|
140
139
|
}
|
|
141
140
|
const zh = {
|
|
142
141
|
createPage: {
|
|
143
|
-
description:
|
|
142
|
+
description: `将代码发送到 Codify 插件转换为设计稿。
|
|
143
|
+
【极致性能要求】若纯 HTML 已保存为本地文件,你必须且只能通过 filePath 传入该文件的绝对路径。严禁使用 Read 工具读取文件内容,严禁将大段代码写入 code 参数。工具底层会自动读取并传输,以节省 Token。`,
|
|
144
144
|
code: "【可选】要发送的 HTML 代码内容。仅当代码是临时生成且未保存为文件时使用。大段代码严禁使用此参数。",
|
|
145
145
|
filePath: "【可选】本地 HTML 文件的绝对路径。若文件已存在本地,必须传此参数,工具会自动读取并执行落盘。",
|
|
146
146
|
projectDir: "【必填】用户当前工作区的根目录绝对路径",
|
|
147
147
|
saveCodeToLocal: "是否将插件返回的渲染结果保存到本地 .codify 目录(落盘机制)"
|
|
148
148
|
},
|
|
149
149
|
updateNode: {
|
|
150
|
-
description: "将修改后的 HTML 代码发回 MasterGo
|
|
150
|
+
description: "将修改后的 HTML 代码发回 MasterGo 画布进行【局部修改】(如改颜色、加文字、改间距等)。⚠️ 【调用前置条件】:你必须且只能在通过 getSelectionCode 拿到该节点的最新代码后进行调用修改!完成代码修改后直接调用此类发送给插件。绝对不要去同步或修改本地基准文件!注意:仅传包含 data-node-id 的那一段 HTML 片段。",
|
|
151
151
|
documentId: "当前 MasterGo 文档 ID。",
|
|
152
152
|
documentPageId: "当前 MasterGo 页面 ID。",
|
|
153
153
|
targetNodeId: "【选填】目标图层 ID (例如 123:456)。如果不传,则默认更新 MasterGo 中当前选中的图层。",
|
|
@@ -161,7 +161,7 @@ const zh = {
|
|
|
161
161
|
filePath: "【必填】本地静态 HTML 文件的绝对路径(通常位于 .codify/... 目录下)。工具会自动读取内容。严禁传入 .vue/.tsx 业务代码路径!"
|
|
162
162
|
},
|
|
163
163
|
getSelectionCode: {
|
|
164
|
-
description: "获取 MasterGo
|
|
164
|
+
description: "获取 MasterGo 中当前选中图层(或指定图层)的代码。⚠️ 【严禁盲改】:用户的每一次修改操作(如改色、改文字等),你都必须首先调用本工具拉取最新的节点代码作为上下文!如果你获取的是子节点,工具只会将代码作为纯文本返回给你进行局部修改上下文,绝对不会在本地生成烦人的 HTML 碎片文件!若是根节点则会自动将完整页面代码同步保存到 .codify 目录。",
|
|
165
165
|
projectDir: "【必填】用户当前工作区的根目录绝对路径",
|
|
166
166
|
targetNodeId: "【选填】MasterGo图层ID (例如 123:456)。如果提供,将直接拉取该ID的代码;如果不提供,将拉取当前选中图层的代码。",
|
|
167
167
|
syncToBase: "【选填】是否将获取到的子图层代码同步回本地 .codify 目录下的基准 HTML 文件(合并更新)。默认为 true。"
|
|
@@ -173,7 +173,7 @@ const zh = {
|
|
|
173
173
|
getDesignDiff: {
|
|
174
174
|
description: `获取设计稿与本地代码的差异。
|
|
175
175
|
【标准双向同步规程】:
|
|
176
|
-
1. 准备:将当前项目业务代码(Vue/React)按 rules
|
|
176
|
+
1. 准备:将当前项目业务代码(Vue/React)按 codify://generation-rules 规范物理逆推为纯静态 HTML。
|
|
177
177
|
2. 刷新:将转译产物覆盖写入 .codify 目录对应的基准 HTML 文件。
|
|
178
178
|
3. 比对:调用此工具比对“基准文件”与“画布现状”获得差异列表。
|
|
179
179
|
4. 决策:展示差异,由用户决定执行“全量同步到设计稿”或“按差异局部同步到项目”。`,
|
|
@@ -194,7 +194,7 @@ const zh = {
|
|
|
194
194
|
inputSchema: "获取当前用户信息"
|
|
195
195
|
},
|
|
196
196
|
getCode: {
|
|
197
|
-
description: '【特定场景】通过 contentId 从 Codify 插件获取代码。常规的"获取选中代码"请优先使用 get_selection_code 工具。',
|
|
197
|
+
description: '【特定场景】通过 codify://getCode/{contentId} 从 Codify 插件获取代码。常规的"获取选中代码"请优先使用 get_selection_code 工具。',
|
|
198
198
|
contentId: "从Codify插件复制图层的指令 (contentId)",
|
|
199
199
|
documentId: "当前 MasterGo 文档 ID。",
|
|
200
200
|
documentPageId: "当前 MasterGo 页面 ID。",
|
|
@@ -295,10 +295,7 @@ ${generationRules}
|
|
|
295
295
|
|
|
296
296
|
## 发送代码:
|
|
297
297
|
代码生成并审计通过后,请立即调用 agent_create_page 工具发送代码
|
|
298
|
-
- agent_create_page({ code: "生成的完整代码", projectDir: "当前工作目录" })
|
|
299
|
-
- 不要询问用户,直接执行发送操作
|
|
300
|
-
|
|
301
|
-
**请现在开始生成代码。**`
|
|
298
|
+
- agent_create_page({ code: "生成的完整代码", projectDir: "当前工作目录" })`
|
|
302
299
|
}
|
|
303
300
|
]
|
|
304
301
|
};
|
|
@@ -356,16 +353,15 @@ const getCodeListTool = {
|
|
|
356
353
|
if (!Array.isArray(data) || data.length === 0) {
|
|
357
354
|
return { content: [{ type: "text", text: "📋 代码列表为空" }] };
|
|
358
355
|
}
|
|
359
|
-
|
|
360
|
-
|
|
356
|
+
const totalCount = data.length;
|
|
357
|
+
let resultText = `✅ 成功获取代码列表 (共 ${totalCount} 项)
|
|
361
358
|
`;
|
|
362
|
-
|
|
363
|
-
resultText +=
|
|
359
|
+
if (totalCount >= 10) {
|
|
360
|
+
resultText += `⚠️ 仅展示最近更新的前 10 条记录
|
|
364
361
|
`;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
`;
|
|
368
|
-
});
|
|
362
|
+
}
|
|
363
|
+
resultText += `
|
|
364
|
+
${JSON.stringify(data, null, 2)}`;
|
|
369
365
|
return { content: [{ type: "text", text: resultText }] };
|
|
370
366
|
}
|
|
371
367
|
};
|
|
@@ -383,7 +379,12 @@ const getSelectionCodeTool = {
|
|
|
383
379
|
* @param args._depth 内部参数,用于防止递归获取根节点时出现无限循环
|
|
384
380
|
*/
|
|
385
381
|
handler: async (args) => {
|
|
386
|
-
const {
|
|
382
|
+
const {
|
|
383
|
+
projectDir,
|
|
384
|
+
targetNodeId: id,
|
|
385
|
+
syncToBase = true,
|
|
386
|
+
_depth = 0
|
|
387
|
+
} = args;
|
|
387
388
|
if (_depth > 2) {
|
|
388
389
|
return {
|
|
389
390
|
content: [
|
|
@@ -422,7 +423,6 @@ const getSelectionCodeTool = {
|
|
|
422
423
|
parentId
|
|
423
424
|
} = nodeInfo;
|
|
424
425
|
if (targetNodeId === rootId) {
|
|
425
|
-
console.log(`[getSelectionCode] 当前节点ID: ${targetNodeId}, 根节点ID: ${rootId}`);
|
|
426
426
|
const saveResult = await saveCodeAndResources({
|
|
427
427
|
baseDir,
|
|
428
428
|
documentId,
|
|
@@ -447,7 +447,6 @@ const getSelectionCodeTool = {
|
|
|
447
447
|
]
|
|
448
448
|
};
|
|
449
449
|
} else {
|
|
450
|
-
console.log(`[getSelectionCode] 当前节点ID: ${targetNodeId}, 根节点ID: ${rootId}`);
|
|
451
450
|
let mergedToFilePath = "";
|
|
452
451
|
if (syncToBase && documentId && documentPageId) {
|
|
453
452
|
const targetPageDir = path.join(
|
|
@@ -467,9 +466,6 @@ const getSelectionCodeTool = {
|
|
|
467
466
|
};
|
|
468
467
|
rootFile = await findRootFile();
|
|
469
468
|
if (!rootFile && _depth === 0) {
|
|
470
|
-
console.log(
|
|
471
|
-
`[getSelectionCode] 基准文件不存在,自动拉取根节点: ${rootId}`
|
|
472
|
-
);
|
|
473
469
|
await getSelectionCodeTool.handler({
|
|
474
470
|
projectDir,
|
|
475
471
|
targetNodeId: rootId,
|
|
@@ -501,11 +497,10 @@ const getSelectionCodeTool = {
|
|
|
501
497
|
mergedToFilePath = rootFilePath;
|
|
502
498
|
}
|
|
503
499
|
} catch (err) {
|
|
504
|
-
console.error("合并到基准文件操作出错:", err);
|
|
505
500
|
}
|
|
506
501
|
}
|
|
507
502
|
}
|
|
508
|
-
await saveCodeAndResources({
|
|
503
|
+
const saveResult = await saveCodeAndResources({
|
|
509
504
|
baseDir,
|
|
510
505
|
documentId,
|
|
511
506
|
documentPageId,
|
|
@@ -523,10 +518,14 @@ const getSelectionCodeTool = {
|
|
|
523
518
|
- 根节点: ${rootId}`;
|
|
524
519
|
if (mergedToFilePath) {
|
|
525
520
|
successText += `
|
|
526
|
-
-
|
|
521
|
+
- 自动机制: 子节点最新代码已合并备份至本地基准 HTML: ${mergedToFilePath}`;
|
|
527
522
|
} else {
|
|
528
523
|
successText += `
|
|
529
|
-
-
|
|
524
|
+
- 提示: 子节点代码已提取到对话上下文中,未生成本地 HTML 碎片文件。可以直接针对返回代码进行修改。`;
|
|
525
|
+
}
|
|
526
|
+
if (targetNodeId !== rootId) {
|
|
527
|
+
successText += `
|
|
528
|
+
- 资源同步: 图片(${saveResult.imageCount}), 图标(${saveResult.svgCount}), 图形(${saveResult.shapeCount})`;
|
|
530
529
|
}
|
|
531
530
|
return {
|
|
532
531
|
content: [
|
|
@@ -849,8 +848,6 @@ registerAllTools(mcpServer);
|
|
|
849
848
|
try {
|
|
850
849
|
const transport = new StdioServerTransport();
|
|
851
850
|
await mcpServer.connect(transport);
|
|
852
|
-
console.error(`[Codify MCP] Client connected to ${SERVER_URL}`);
|
|
853
851
|
} catch (error) {
|
|
854
|
-
console.error(`[Codify MCP] Connection failed:`, error.message);
|
|
855
852
|
process.exit(1);
|
|
856
853
|
}
|
package/dist/rules.md
CHANGED