exploria-ui-mcp-server 2.2.5 → 2.2.7
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 +270 -34
- package/dist/index.js +3072 -2947
- package/dist/knowledge/vector-db.json +120728 -0
- package/dist/logs/build-log-2026-04-13-09-22-20.json +1089 -0
- package/package.json +4 -8
package/README.md
CHANGED
|
@@ -24,31 +24,7 @@ Exploria UI 是一套现代化、高性能的 UI 组件库,专注于提供优
|
|
|
24
24
|
- **可定制性**:支持主题定制和样式覆盖
|
|
25
25
|
- **高性能**:优化渲染性能,确保流畅的交互体验
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
Exploria UI 组件库包含丰富的组件,按功能分为以下几类:
|
|
30
|
-
|
|
31
|
-
| 类别 | 描述 | 示例组件 |
|
|
32
|
-
| ------------ | ------------------------ | ------------------------ |
|
|
33
|
-
| 基础组件 | 构建 UI 的基础元素 | Button, Input, Icon |
|
|
34
|
-
| 布局组件 | 用于页面布局的组件 | Layout, Grid, Space |
|
|
35
|
-
| 表单组件 | 用于数据收集和验证的组件 | Form, Select, DatePicker |
|
|
36
|
-
| 数据展示组件 | 用于展示数据的组件 | Table, List, Card |
|
|
37
|
-
| 反馈组件 | 用于用户反馈的组件 | Modal, Message, Loading |
|
|
38
|
-
| 导航组件 | 用于页面导航的组件 | Menu, Tabs, Breadcrumb |
|
|
39
|
-
| 高级组件 | 复杂功能的组合组件 | Pagination, Upload, Tree |
|
|
40
|
-
| AI 相关组件 | 集成 AI 功能的组件 | AI Assistant, Chatbot |
|
|
41
|
-
|
|
42
|
-
### 2.3 文档体系
|
|
43
|
-
|
|
44
|
-
Exploria UI 拥有完整的文档体系,包括:
|
|
45
|
-
|
|
46
|
-
- **组件文档**:详细的组件使用说明、属性列表、事件和插槽
|
|
47
|
-
- **API 文档**:完整的 API 参考
|
|
48
|
-
- **使用示例**:丰富的代码示例和最佳实践
|
|
49
|
-
- **设计指南**:设计原则和样式规范
|
|
50
|
-
|
|
51
|
-
## 3. MCP Server 核心架构
|
|
27
|
+
## 核心架构
|
|
52
28
|
|
|
53
29
|
### 3.1 架构定位
|
|
54
30
|
|
|
@@ -76,12 +52,10 @@ MCP Server 启动时会注册三类核心模块:
|
|
|
76
52
|
- 提供 AI IDE 可调用的各种工具函数
|
|
77
53
|
- 包括文档搜索、组件列表获取、组件详情查询等功能
|
|
78
54
|
- 注册入口:`./tools/index.js`
|
|
79
|
-
|
|
80
55
|
2. **资源模块 (Resources)**
|
|
81
56
|
- 提供项目相关的资源支持
|
|
82
57
|
- 包括服务器状态、API 文档、组件清单等
|
|
83
58
|
- 注册入口:`./resources/index.js`
|
|
84
|
-
|
|
85
59
|
3. **提示模块 (Prompts)**
|
|
86
60
|
- 提供指导 AI 模型生成更准确响应的提示模板
|
|
87
61
|
- 包括组件文档模板生成、使用示例生成等
|
|
@@ -148,7 +122,273 @@ MCP Server 启动时会注册三类核心模块:
|
|
|
148
122
|
4. 同时将项目根目录的 README.md 复制到 `mcp-server/dist/public/README.md`
|
|
149
123
|
5. 最终构建产物包含完整的 MCP Server 实现和所需的知识文件
|
|
150
124
|
|
|
151
|
-
### 6.2
|
|
125
|
+
### 6.2 向量数据库构建过程
|
|
126
|
+
|
|
127
|
+
#### 6.2.1 构建模式
|
|
128
|
+
|
|
129
|
+
系统采用单一构建模式:**预构建模式(Prebuild)**,在项目打包时统一构建向量数据库,确保服务启动时直接加载预计算的索引,实现最快的启动速度和查询性能。
|
|
130
|
+
|
|
131
|
+
#### 6.2.2 构建流程详解
|
|
132
|
+
|
|
133
|
+
**阶段一:文档收集与解析**
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
文档源目录 (docsRoot)
|
|
137
|
+
│
|
|
138
|
+
▼
|
|
139
|
+
┌─────────────────────┐
|
|
140
|
+
│ collectDocumentRoots│ ← 递归扫描目录,识别文档根目录(含 Document.vue/intro.md)
|
|
141
|
+
└─────────────────────┘
|
|
142
|
+
│
|
|
143
|
+
▼
|
|
144
|
+
┌─────────────────────┐
|
|
145
|
+
│ collectSourceFiles │ ← 收集所有文本文件(.md, .vue, .ts, .js)
|
|
146
|
+
└─────────────────────┘
|
|
147
|
+
│
|
|
148
|
+
▼
|
|
149
|
+
┌─────────────────────┐
|
|
150
|
+
│ sortSourceFiles │ ← 按优先级排序(document > example > source)
|
|
151
|
+
└─────────────────────┘
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**阶段二:文档结构化**
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
158
|
+
│ buildKnowledgeDocuments │
|
|
159
|
+
├─────────────────────────────────────────────────────────────┤
|
|
160
|
+
│ 1. 提取文档内容 → documentContent │
|
|
161
|
+
│ 2. 解析组件属性 → props (name, type, default, desc) │
|
|
162
|
+
│ 3. 解析事件定义 → events (name, description) │
|
|
163
|
+
│ 4. 解析插槽定义 → slots (name, description, default)│
|
|
164
|
+
│ 5. 提取代码示例 → examples (title, code) │
|
|
165
|
+
│ 6. 构建别名索引 → aliases │
|
|
166
|
+
│ 7. 生成关键词 → keywords │
|
|
167
|
+
└─────────────────────────────────────────────────────────────┘
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**阶段三:文本切块与向量化**
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
174
|
+
│ buildKnowledgeArtifact │
|
|
175
|
+
├─────────────────────────────────────────────────────────────┤
|
|
176
|
+
│ 1. splitIntoChunks → 将文档切分为 512 字符的块 │
|
|
177
|
+
│ 2. tokenize → 分词处理 │
|
|
178
|
+
│ 3. 计算 IDF 权重 → 基于文档频率的逆文档频率 │
|
|
179
|
+
│ 4. 计算 TF-IDF → 词频-逆文档频率权重 │
|
|
180
|
+
│ 5. buildVector → 生成 256 维向量 │
|
|
181
|
+
│ └─ 使用 FNV-1a 哈希将 token 映射到向量维度 │
|
|
182
|
+
│ └─ 主哈希 + 次哈希双位置映射 │
|
|
183
|
+
└─────────────────────────────────────────────────────────────┘
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**阶段四:索引构建**
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
190
|
+
│ 生成 VectorDbArtifact │
|
|
191
|
+
├─────────────────────────────────────────────────────────────┤
|
|
192
|
+
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
|
|
193
|
+
│ │ documents │ │ chunks │ │ idfMap │ │
|
|
194
|
+
│ │ (文档元数据)│ │ (向量块) │ │ (IDF映射) │ │
|
|
195
|
+
│ └───────────┘ └───────────┘ └───────────┘ │
|
|
196
|
+
│ │ │ │ │
|
|
197
|
+
│ ▼ ▼ ▼ │
|
|
198
|
+
│ ┌───────────────────────────────────────────┐ │
|
|
199
|
+
│ │ 持久化到 vector-db.json │ │
|
|
200
|
+
│ └───────────────────────────────────────────┘ │
|
|
201
|
+
└─────────────────────────────────────────────────────────────┘
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### 6.2.3 向量生成算法
|
|
205
|
+
|
|
206
|
+
本项目采用 **TF-IDF + 哈希向量化** 的轻量级方案:
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
TF-IDF 权重计算:
|
|
210
|
+
weight(token) = (1 + log(frequency)) * log((totalChunks + 1) / (documentFrequency + 1))
|
|
211
|
+
|
|
212
|
+
向量生成:
|
|
213
|
+
vector[primaryIndex] += weight
|
|
214
|
+
vector[secondaryIndex] -= weight * 0.5
|
|
215
|
+
|
|
216
|
+
其中:
|
|
217
|
+
- primaryIndex = FNV-1a(token) % 256
|
|
218
|
+
- secondaryIndex = FNV-1a(token:secondary) % 256
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**设计优势**:
|
|
222
|
+
|
|
223
|
+
- 无需外部向量模型依赖,零运行时开销
|
|
224
|
+
- 256 维向量,内存占用小
|
|
225
|
+
- 支持快速构建和查询
|
|
226
|
+
- 可重现性强,相同输入产生相同向量
|
|
227
|
+
|
|
228
|
+
### 6.3 MCP Server 实现架构
|
|
229
|
+
|
|
230
|
+
#### 6.3.1 整体架构
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
┌───────────────────────────────────────────────────────────────┐
|
|
234
|
+
│ AI IDE (Cursor/Trae) │
|
|
235
|
+
│ ▲ │
|
|
236
|
+
│ │ StdioServerTransport │
|
|
237
|
+
│ │ (标准输入输出管道) │
|
|
238
|
+
│ ▼ │
|
|
239
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
240
|
+
│ │ ExploriaUIMCPServer │ │
|
|
241
|
+
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
|
242
|
+
│ │ │ Tools │ │ Resources │ │ Prompts │ │ │
|
|
243
|
+
│ │ │ (工具注册) │ │ (资源注册) │ │ (提示注册) │ │ │
|
|
244
|
+
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
|
|
245
|
+
│ │ │ │ │ │ │
|
|
246
|
+
│ │ └────────────────┼────────────────┘ │ │
|
|
247
|
+
│ │ ▼ │ │
|
|
248
|
+
│ │ ┌─────────────────────┐ │ │
|
|
249
|
+
│ │ │ KnowledgeService │ │ │
|
|
250
|
+
│ │ │ (向量数据库服务) │ │ │
|
|
251
|
+
│ │ └───────────┬─────────┘ │ │
|
|
252
|
+
│ │ │ │ │
|
|
253
|
+
│ │ ▼ │ │
|
|
254
|
+
│ │ ┌─────────────────────┐ │ │
|
|
255
|
+
│ │ │ VectorDbArtifact │ │ │
|
|
256
|
+
│ │ │ (向量索引数据) │ │ │
|
|
257
|
+
│ │ └─────────────────────┘ │ │
|
|
258
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
259
|
+
└───────────────────────────────────────────────────────────────┘
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
#### 6.3.2 核心组件职责
|
|
263
|
+
|
|
264
|
+
| 组件 | 职责 | 关键方法/属性 |
|
|
265
|
+
| ------------------------ | ------------------------ | --------------------------------------------- |
|
|
266
|
+
| **ExploriaUIMCPServer** | 主服务器类,管理生命周期 | `start()`, `shutdown()`, `initializeServer()` |
|
|
267
|
+
| **McpServer** | MCP SDK 核心实例 | 处理协议通信、注册工具/资源/提示 |
|
|
268
|
+
| **StdioServerTransport** | 标准输入输出传输层 | 建立与 IDE 的管道连接 |
|
|
269
|
+
| **KnowledgeService** | 向量数据库服务 | `searchKnowledge()`, `getComponentDetails()` |
|
|
270
|
+
| **DocumentParser** | 文档解析器 | `initialize()`, `getStatus()` |
|
|
271
|
+
|
|
272
|
+
#### 6.3.3 服务启动流程
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
276
|
+
│ 启动流程 │
|
|
277
|
+
├─────────────────────────────────────────────────────────────┤
|
|
278
|
+
│ 1. loadPackageJson() → 加载 package.json 配置 │
|
|
279
|
+
│ │ │
|
|
280
|
+
│ ▼ │
|
|
281
|
+
│ 2. setupEventHandlers() → 设置信号处理 (SIGINT/SIGTERM) │
|
|
282
|
+
│ │ │
|
|
283
|
+
│ ▼ │
|
|
284
|
+
│ 3. initializeServer() → 初始化知识索引 │
|
|
285
|
+
│ │ │
|
|
286
|
+
│ ├─→ docParser.initialize() │
|
|
287
|
+
│ │ └─ 加载预构建向量索引 │
|
|
288
|
+
│ │ │
|
|
289
|
+
│ ├─→ new McpServer({name, version, description}) │
|
|
290
|
+
│ │ │
|
|
291
|
+
│ ├─→ registerTools() │
|
|
292
|
+
│ ├─→ registerResources() │
|
|
293
|
+
│ └─→ registerPrompts() │
|
|
294
|
+
│ │ │
|
|
295
|
+
│ ▼ │
|
|
296
|
+
│ 4. server.connect(transport) → 建立连接 │
|
|
297
|
+
│ │ │
|
|
298
|
+
│ ▼ │
|
|
299
|
+
│ 5. 等待 AI IDE 连接请求... │
|
|
300
|
+
└─────────────────────────────────────────────────────────────┘
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
#### 6.3.4 搜索流程(混合检索)
|
|
304
|
+
|
|
305
|
+
```
|
|
306
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
307
|
+
│ 搜索流程 (Hybrid Search) │
|
|
308
|
+
├─────────────────────────────────────────────────────────────┤
|
|
309
|
+
│ 输入: query = "button" │
|
|
310
|
+
│ │ │
|
|
311
|
+
│ ▼ │
|
|
312
|
+
│ 1. normalizePlainText() → 文本规范化 │
|
|
313
|
+
│ 2. expandQueryTerms() → 扩展查询词 │
|
|
314
|
+
│ 3. buildQueryVector() → 生成查询向量 │
|
|
315
|
+
│ │ │
|
|
316
|
+
│ ▼ │
|
|
317
|
+
│ ┌─────────────────┬─────────────────┐ │
|
|
318
|
+
│ │ Fulltext │ Semantic │ │
|
|
319
|
+
│ │ (全文检索) │ (语义检索) │ │
|
|
320
|
+
│ └────────┬────────┴────────┬────────┘ │
|
|
321
|
+
│ │ │ │
|
|
322
|
+
│ ▼ ▼ │
|
|
323
|
+
│ alias匹配(+8) cosineSimilarity() │
|
|
324
|
+
│ partial匹配(+4) 计算向量相似度 │
|
|
325
|
+
│ keyword匹配(+1.5) │
|
|
326
|
+
│ content匹配(+1) │
|
|
327
|
+
│ │ │ │
|
|
328
|
+
│ └────────┬────────┘ │
|
|
329
|
+
│ ▼ │
|
|
330
|
+
│ 4. 混合评分: fulltext * 0.55 + semantic * 0.45 │
|
|
331
|
+
│ │ │
|
|
332
|
+
│ ▼ │
|
|
333
|
+
│ 5. 排序 → 过滤(score > 0) → 截取前N条 → 返回结果 │
|
|
334
|
+
└─────────────────────────────────────────────────────────────┘
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
#### 6.3.5 索引结构
|
|
338
|
+
|
|
339
|
+
**VectorDbArtifact 数据结构**:
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
interface VectorDbArtifact {
|
|
343
|
+
version: number; // 版本号
|
|
344
|
+
generatedAt: string; // 生成时间
|
|
345
|
+
docsRoot: string; // 文档根目录
|
|
346
|
+
buildMode: string; // 构建模式
|
|
347
|
+
idfMap: Record<string, number>; // IDF 映射表
|
|
348
|
+
documents: KnowledgeDocument[]; // 文档列表
|
|
349
|
+
chunks: KnowledgeChunk[]; // 向量块列表
|
|
350
|
+
metrics: {
|
|
351
|
+
buildTimeMs: number; // 构建耗时
|
|
352
|
+
documentCount: number; // 文档数
|
|
353
|
+
chunkCount: number; // 切块数
|
|
354
|
+
averageChunkLength: number; // 平均切块长度
|
|
355
|
+
vectorDimension: number; // 向量维度
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**KnowledgeChunk 结构**:
|
|
361
|
+
|
|
362
|
+
```typescript
|
|
363
|
+
interface KnowledgeChunk {
|
|
364
|
+
id: string; // 唯一标识 (documentId#order)
|
|
365
|
+
documentId: string; // 所属文档ID
|
|
366
|
+
order: number; // 块顺序
|
|
367
|
+
text: string; // 文本内容
|
|
368
|
+
vector: number[]; // 256维向量
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
#### 6.3.6 缓存机制
|
|
373
|
+
|
|
374
|
+
KnowledgeService 实现了两级缓存:
|
|
375
|
+
|
|
376
|
+
| 缓存类型 | 存储内容 | TTL | 最大容量 |
|
|
377
|
+
| -------------- | ------------------- | ------------ | -------- |
|
|
378
|
+
| **搜索缓存** | 查询结果 | 60s | 200 条 |
|
|
379
|
+
| **文档块映射** | documentId → chunks | 服务生命周期 | 无限制 |
|
|
380
|
+
| **别名索引** | alias → document | 服务生命周期 | 无限制 |
|
|
381
|
+
|
|
382
|
+
#### 6.3.7 性能特性
|
|
383
|
+
|
|
384
|
+
| 指标 | 典型值 | 说明 |
|
|
385
|
+
| -------- | -------- | ---------------- |
|
|
386
|
+
| 向量维度 | 256 | 平衡精度与性能 |
|
|
387
|
+
| 切块大小 | 512 字符 | 兼顾上下文完整性 |
|
|
388
|
+
| 搜索延迟 | < 100ms | 本地向量计算 |
|
|
389
|
+
| 内存占用 | < 50MB | 典型组件库规模 |
|
|
390
|
+
|
|
391
|
+
### 6.4 NPM 包结构
|
|
152
392
|
|
|
153
393
|
当项目打包完成并上传至 NPM 仓库后,生成的 NPM 包包含以下目录和文件结构:
|
|
154
394
|
|
|
@@ -163,7 +403,7 @@ mcp-server/
|
|
|
163
403
|
└── README.md
|
|
164
404
|
```
|
|
165
405
|
|
|
166
|
-
### 6.
|
|
406
|
+
### 6.5 项目结构
|
|
167
407
|
|
|
168
408
|
```
|
|
169
409
|
src/
|
|
@@ -187,7 +427,7 @@ src/
|
|
|
187
427
|
└── documentParser.ts # 文档解析器
|
|
188
428
|
```
|
|
189
429
|
|
|
190
|
-
### 6.
|
|
430
|
+
### 6.6 技术栈
|
|
191
431
|
|
|
192
432
|
| 技术 | 用途 |
|
|
193
433
|
| --------------------------- | ------------------------ |
|
|
@@ -208,12 +448,10 @@ MCP Server 与 AI IDE 之间支持三种传输协议:
|
|
|
208
448
|
- 通过管道传输数据,安全可靠
|
|
209
449
|
- 由 AI 客户端自动启动、管理和停止
|
|
210
450
|
- 本项目采用此协议作为主要通信方式
|
|
211
|
-
|
|
212
451
|
2. **Server-Sent Events (SSE)**
|
|
213
452
|
- 基于 HTTP 的单向实时通信协议
|
|
214
453
|
- 适合服务器向客户端推送数据的场景
|
|
215
454
|
- 支持事件驱动的通信模式
|
|
216
|
-
|
|
217
455
|
3. **流式 HTTP (Streaming HTTP)**
|
|
218
456
|
- 基于 HTTP 长连接的双向通信
|
|
219
457
|
- 支持服务器和客户端之间的连续数据传输
|
|
@@ -247,11 +485,9 @@ npx -y @modelcontextprotocol/inspector node dist/index.js
|
|
|
247
485
|
- 确保已正确构建项目:`pnpm run build`
|
|
248
486
|
- 检查当前工作目录,确保在正确的位置运行命令
|
|
249
487
|
- 查看控制台输出的错误信息,针对性解决
|
|
250
|
-
|
|
251
488
|
2. **JSON 解析错误**:
|
|
252
489
|
- 确保所有日志输出已重定向到 stderr(本项目已自动处理)
|
|
253
490
|
- 检查是否有其他进程占用了 stdio
|
|
254
|
-
|
|
255
491
|
3. **文档未找到**:
|
|
256
492
|
- 确保文档已正确复制到 `public` 目录
|
|
257
493
|
- 检查 `docsRoot` 配置是否正确
|