phinix 0.0.4
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 +311 -0
- package/debug-client.js +56 -0
- package/docs/src/DPHeader/README.md +36 -0
- package/docs/src/DPHeader/demo/advanced.tsx +49 -0
- package/docs/src/DPHeader/demo/basic.tsx +26 -0
- package/examples/create-button.json +38 -0
- package/examples/create-modal.json +43 -0
- package/mcp-config.json +10 -0
- package/package.json +34 -0
- package/quick-test.js +111 -0
- package/src/component-composer.js +582 -0
- package/src/components/DPHeader/DPHeader.tsx +25 -0
- package/src/components/DPHeader/define.ts +37 -0
- package/src/components/DPHeader.css +33 -0
- package/src/components/DPHeader.tsx +38 -0
- package/src/config.js +34 -0
- package/src/index.js +4 -0
- package/src/resources/components-info.json +334 -0
- package/src/resources/project-knowledge.md +134 -0
- package/src/rules/instruction-components.md +970 -0
- package/src/rules/instruction-core.md +99 -0
- package/src/rules/instruction-tailwind-details.md +494 -0
- package/src/rules/instruction.md +423 -0
- package/src/server.js +109 -0
- package/src/tools/componentDefine.js +64 -0
- package/src/tools/componentDemos.js +156 -0
- package/src/tools/componentDetails.js +168 -0
- package/src/tools/componentList.js +80 -0
- package/src/tools/componentReadme.js +77 -0
- package/src/tools/componentSource.js +93 -0
- package/src/tools/index.js +41 -0
- package/src/tools/projectKnowledge.js +68 -0
- package/src/utils.js +62 -0
- package/templates/data-table-crud/EntityColumns.tsx +1 -0
- package/templates/data-table-crud/EntityList.tsx +1 -0
- package/test-mcp.sh +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# phinix MCP 服务器
|
|
2
|
+
|
|
3
|
+
phinix 是一个基于 Model Context Protocol (MCP) 的服务器,为 AI 模型提供项目内组件的查询和详情获取功能。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
### 🧠 项目知识获取 (`get_project_knowledge`)
|
|
8
|
+
- **【必须首先调用】** 获取项目背景知识和开发规范
|
|
9
|
+
- 包含技术栈、样式规范、组件使用指南和代码示例
|
|
10
|
+
- 在进行任何代码开发前,必须先调用此工具了解项目规范
|
|
11
|
+
|
|
12
|
+
### 🔍 组件列表查询 (`get_component_list`)
|
|
13
|
+
- 获取项目内所有可用的组件列表
|
|
14
|
+
- 支持按关键词搜索组件名称或使用场景
|
|
15
|
+
- 支持限制返回结果数量
|
|
16
|
+
- 提供组件的基本信息(名称和使用场景)
|
|
17
|
+
|
|
18
|
+
### 🔧 组件定义获取 (`get_component_define`)
|
|
19
|
+
- 获取组件的TypeScript接口定义和属性说明
|
|
20
|
+
- 返回组件的类型定义和接口文档
|
|
21
|
+
- 支持内容长度限制,防止过长内容
|
|
22
|
+
|
|
23
|
+
### 📄 组件源码获取 (`get_component_source`)
|
|
24
|
+
- 获取组件的完整实现代码
|
|
25
|
+
- 用于学习和参考组件的具体实现
|
|
26
|
+
- 支持多种文件格式和目录结构
|
|
27
|
+
- 支持内容截取,避免过长输出
|
|
28
|
+
|
|
29
|
+
### 📖 组件文档获取 (`get_component_readme`)
|
|
30
|
+
- 获取组件的使用文档和说明信息
|
|
31
|
+
- 返回组件的README文档内容
|
|
32
|
+
- 包含组件的使用指南和注意事项
|
|
33
|
+
|
|
34
|
+
### 🎯 组件示例获取 (`get_component_demos`)
|
|
35
|
+
- 获取组件的使用示例代码和演示效果
|
|
36
|
+
- 支持获取多个示例文件
|
|
37
|
+
- 可配置返回的示例数量和内容长度
|
|
38
|
+
- 可选择是否包含示例文件内容
|
|
39
|
+
|
|
40
|
+
## 安装和使用
|
|
41
|
+
|
|
42
|
+
### 环境要求
|
|
43
|
+
- Node.js 18+
|
|
44
|
+
- npm 或 yarn
|
|
45
|
+
|
|
46
|
+
### 安装依赖
|
|
47
|
+
```bash
|
|
48
|
+
npm install
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 启动服务器
|
|
52
|
+
|
|
53
|
+
#### 方式1:直接启动(使用当前目录作为项目根目录)
|
|
54
|
+
```bash
|
|
55
|
+
npm start
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### 方式2:指定项目根目录
|
|
59
|
+
```bash
|
|
60
|
+
# 使用环境变量
|
|
61
|
+
PROJECT_ROOT=/path/to/your/project npm start
|
|
62
|
+
|
|
63
|
+
# 或者使用命令行参数
|
|
64
|
+
node src/index.js /path/to/your/project
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 在 cursor 中配置
|
|
68
|
+
|
|
69
|
+
在 cursor 的配置文件中添加以下配置:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"mcpServers": {
|
|
74
|
+
"phinix": {
|
|
75
|
+
"command": "npx",
|
|
76
|
+
"args": [
|
|
77
|
+
"phinix",
|
|
78
|
+
"/Users/wuzixuan/code-lib/dataphin" // 修改此处为你的dataphin项目地址
|
|
79
|
+
],
|
|
80
|
+
"cwd": "/Users/wuzixuan/code-lib/phinix"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## MCP 工具说明
|
|
87
|
+
|
|
88
|
+
### 1. get_project_knowledge
|
|
89
|
+
|
|
90
|
+
**【必须首先调用】** 获取项目背景知识和开发规范。
|
|
91
|
+
|
|
92
|
+
**参数:**
|
|
93
|
+
- 无需参数
|
|
94
|
+
|
|
95
|
+
**返回:**
|
|
96
|
+
- 项目技术栈信息
|
|
97
|
+
- 样式规范和设计指南
|
|
98
|
+
- 组件使用规范
|
|
99
|
+
- 代码示例和最佳实践
|
|
100
|
+
|
|
101
|
+
**示例:**
|
|
102
|
+
```
|
|
103
|
+
工具:get_project_knowledge
|
|
104
|
+
参数:{}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 2. get_component_list
|
|
108
|
+
|
|
109
|
+
获取项目内所有可用的组件列表。
|
|
110
|
+
|
|
111
|
+
**参数:**
|
|
112
|
+
- `search` (可选): 搜索关键词,可以匹配组件名称或使用场景
|
|
113
|
+
- `limit` (可选): 返回结果的最大数量,默认为50
|
|
114
|
+
|
|
115
|
+
**返回:**
|
|
116
|
+
- 组件列表和基本信息
|
|
117
|
+
- 匹配的组件数量
|
|
118
|
+
- 搜索关键词(如果有)
|
|
119
|
+
|
|
120
|
+
**示例:**
|
|
121
|
+
```
|
|
122
|
+
工具:get_component_list
|
|
123
|
+
参数:{"search": "table", "limit": 5}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
### 3. get_component_define
|
|
128
|
+
|
|
129
|
+
获取组件的TypeScript接口定义和属性说明。
|
|
130
|
+
|
|
131
|
+
**参数:**
|
|
132
|
+
- `componentName` (必需): 要获取定义的组件名称
|
|
133
|
+
- `maxContentLength` (可选): 内容的最大长度(字符数),超过会被截取,默认为5000
|
|
134
|
+
|
|
135
|
+
**返回:**
|
|
136
|
+
- 组件的TypeScript类型定义
|
|
137
|
+
- 接口属性说明
|
|
138
|
+
- 类型约束信息
|
|
139
|
+
|
|
140
|
+
**示例:**
|
|
141
|
+
```
|
|
142
|
+
工具:get_component_define
|
|
143
|
+
参数:{"componentName": "DPTable", "maxContentLength": 3000}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 4. get_component_source
|
|
147
|
+
|
|
148
|
+
获取组件的完整实现代码。
|
|
149
|
+
|
|
150
|
+
**参数:**
|
|
151
|
+
- `componentName` (必需): 要获取源码的组件名称
|
|
152
|
+
- `maxContentLength` (可选): 内容的最大长度(字符数),超过会被截取,默认为8000
|
|
153
|
+
|
|
154
|
+
**返回:**
|
|
155
|
+
- 组件的完整源代码
|
|
156
|
+
- 文件路径信息
|
|
157
|
+
- 代码实现细节
|
|
158
|
+
|
|
159
|
+
**示例:**
|
|
160
|
+
```
|
|
161
|
+
工具:get_component_source
|
|
162
|
+
参数:{"componentName": "DPButton", "maxContentLength": 5000}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 5. get_component_readme
|
|
166
|
+
|
|
167
|
+
获取组件的使用文档和说明信息。
|
|
168
|
+
|
|
169
|
+
**参数:**
|
|
170
|
+
- `componentName` (必需): 要获取文档的组件名称
|
|
171
|
+
- `maxContentLength` (可选): 内容的最大长度(字符数),超过会被截取,默认为10000
|
|
172
|
+
|
|
173
|
+
**返回:**
|
|
174
|
+
- 组件的README文档内容
|
|
175
|
+
- 使用指南和说明
|
|
176
|
+
- 注意事项和最佳实践
|
|
177
|
+
|
|
178
|
+
**示例:**
|
|
179
|
+
```
|
|
180
|
+
工具:get_component_readme
|
|
181
|
+
参数:{"componentName": "DPForm"}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 6. get_component_demos
|
|
185
|
+
|
|
186
|
+
获取组件的使用示例代码和演示效果。
|
|
187
|
+
|
|
188
|
+
**参数:**
|
|
189
|
+
- `componentName` (必需): 要获取示例的组件名称
|
|
190
|
+
- `maxDemoCount` (可选): 最多返回的demo示例数量,默认为5
|
|
191
|
+
- `maxContentLength` (可选): 单个demo文件内容的最大长度(字符数),超过会被截取,默认为3000
|
|
192
|
+
- `includeContent` (可选): 是否包含demo文件内容,false时只返回文件列表,默认为true
|
|
193
|
+
|
|
194
|
+
**返回:**
|
|
195
|
+
- 组件的示例代码
|
|
196
|
+
- 演示效果说明
|
|
197
|
+
- 使用场景示例
|
|
198
|
+
|
|
199
|
+
**示例:**
|
|
200
|
+
```
|
|
201
|
+
工具:get_component_demos
|
|
202
|
+
参数:{"componentName": "DPChart", "maxDemoCount": 3, "includeContent": true}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## 项目结构要求
|
|
206
|
+
|
|
207
|
+
### 必需的资源文件
|
|
208
|
+
|
|
209
|
+
#### 1. 组件信息文件
|
|
210
|
+
服务器需要 `src/resources/components-info.json` 文件,包含组件的基本信息:
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"timestamp": "2025-07-04T07:48:06.884Z",
|
|
215
|
+
"totalCount": 82,
|
|
216
|
+
"components": [
|
|
217
|
+
{
|
|
218
|
+
"name": "ComponentName",
|
|
219
|
+
"whenToUse": "组件的使用场景描述"
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### 2. 项目知识文件
|
|
226
|
+
服务器需要 `src/resources/project-knowledge.md` 文件,包含项目的背景知识和开发规范:
|
|
227
|
+
- 技术栈信息
|
|
228
|
+
- 样式规范和设计指南
|
|
229
|
+
- 组件使用规范
|
|
230
|
+
- 代码示例和最佳实践
|
|
231
|
+
|
|
232
|
+
### 组件文件结构
|
|
233
|
+
|
|
234
|
+
对于每个组件,推荐的目录结构为:
|
|
235
|
+
```
|
|
236
|
+
src/components/ComponentName/
|
|
237
|
+
├── ComponentName.tsx # 主要实现文件
|
|
238
|
+
├── index.tsx # 导出文件
|
|
239
|
+
├── define.ts # TypeScript类型定义
|
|
240
|
+
├── README.md # 组件文档
|
|
241
|
+
└── demos/ # 示例目录
|
|
242
|
+
├── basic.tsx # 基础示例
|
|
243
|
+
├── advanced.tsx # 高级示例
|
|
244
|
+
└── ...
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 组件文件查找
|
|
248
|
+
|
|
249
|
+
服务器会在以下目录中查找组件实现文件:
|
|
250
|
+
- `src/components/`
|
|
251
|
+
- `components/`
|
|
252
|
+
- `src/`
|
|
253
|
+
- `lib/components/`
|
|
254
|
+
- `packages/`
|
|
255
|
+
|
|
256
|
+
支持的文件格式:
|
|
257
|
+
- 主要实现:`ComponentName.tsx`, `ComponentName.ts`, `index.tsx`, `index.ts`
|
|
258
|
+
- 类型定义:`define.ts`
|
|
259
|
+
- 文档文件:`README.md`
|
|
260
|
+
- 示例文件:`demos/` 目录下的各种格式文件
|
|
261
|
+
|
|
262
|
+
## 开发和测试
|
|
263
|
+
|
|
264
|
+
### 运行测试
|
|
265
|
+
```bash
|
|
266
|
+
# 测试组件列表功能
|
|
267
|
+
node quick-test.js
|
|
268
|
+
|
|
269
|
+
# 测试组件详情功能
|
|
270
|
+
node test-component-details.js
|
|
271
|
+
|
|
272
|
+
# 使用调试客户端测试所有功能
|
|
273
|
+
node debug-client.js
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 开发模式
|
|
277
|
+
```bash
|
|
278
|
+
npm run dev
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### 测试MCP连接
|
|
282
|
+
```bash
|
|
283
|
+
# 使用测试脚本验证MCP服务器
|
|
284
|
+
./test-mcp.sh
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## 技术栈
|
|
288
|
+
|
|
289
|
+
- **MCP SDK**: @modelcontextprotocol/sdk
|
|
290
|
+
- **Schema验证**: Zod
|
|
291
|
+
- **Transport**: STDIO (标准输入输出)
|
|
292
|
+
- **文件系统**: Node.js fs/promises
|
|
293
|
+
|
|
294
|
+
## 错误处理
|
|
295
|
+
|
|
296
|
+
- 自动处理文件路径问题,支持多种部署环境
|
|
297
|
+
- 提供详细的错误信息和建议
|
|
298
|
+
- 当组件不存在时提供可用组件的提示
|
|
299
|
+
|
|
300
|
+
## 注意事项
|
|
301
|
+
|
|
302
|
+
1. **项目根目录设置**: 确保正确设置项目根目录,这影响组件文件的查找
|
|
303
|
+
2. **文件权限**: 确保服务器有权限读取项目目录中的文件
|
|
304
|
+
3. **组件信息同步**: 保持 `components-info.json` 文件与实际组件的同步
|
|
305
|
+
4. **项目知识文件**: 确保 `src/resources/project-knowledge.md` 文件存在且内容完整
|
|
306
|
+
5. **首次使用**: 在使用其他工具前,务必先调用 `get_project_knowledge` 获取项目规范
|
|
307
|
+
6. **组件结构**: 推荐按照标准目录结构组织组件文件,以获得最佳体验
|
|
308
|
+
|
|
309
|
+
## 许可证
|
|
310
|
+
|
|
311
|
+
MIT License
|
package/debug-client.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
4
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
5
|
+
|
|
6
|
+
async function debugMcpServer() {
|
|
7
|
+
const transport = new StdioClientTransport({
|
|
8
|
+
command: "node",
|
|
9
|
+
args: ["src/index.js"]
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const client = new Client(
|
|
13
|
+
{
|
|
14
|
+
name: "debug-client",
|
|
15
|
+
version: "1.0.0"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
capabilities: {}
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
console.log("🔌 连接到MCP服务器...");
|
|
24
|
+
await client.connect(transport);
|
|
25
|
+
console.log("✅ 连接成功!");
|
|
26
|
+
|
|
27
|
+
// 1. 获取工具列表
|
|
28
|
+
console.log("\n📋 获取工具列表:");
|
|
29
|
+
const tools = await client.listTools();
|
|
30
|
+
console.log(JSON.stringify(tools, null, 2));
|
|
31
|
+
|
|
32
|
+
// 2. 测试获取组件列表
|
|
33
|
+
console.log("\n🔍 测试获取组件列表 (限制5个):");
|
|
34
|
+
const result1 = await client.callTool({
|
|
35
|
+
name: "get_component_list",
|
|
36
|
+
arguments: { limit: 5 }
|
|
37
|
+
});
|
|
38
|
+
console.log("响应:", JSON.stringify(result1, null, 2));
|
|
39
|
+
|
|
40
|
+
// 3. 测试搜索功能
|
|
41
|
+
console.log("\n🔍 测试搜索功能 (搜索'table'):");
|
|
42
|
+
const result2 = await client.callTool({
|
|
43
|
+
name: "get_component_list",
|
|
44
|
+
arguments: { search: "table", limit: 3 }
|
|
45
|
+
});
|
|
46
|
+
console.log("响应:", JSON.stringify(result2, null, 2));
|
|
47
|
+
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error("❌ 调试失败:", error);
|
|
50
|
+
} finally {
|
|
51
|
+
await client.close();
|
|
52
|
+
console.log("\n🔌 连接已关闭");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
debugMcpServer().catch(console.error);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# DPHeader 组件
|
|
2
|
+
|
|
3
|
+
页面头部组件,用于显示页面的主标题和副标题。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- 支持主标题和可选的副标题显示
|
|
8
|
+
- 可自定义样式类名
|
|
9
|
+
- 响应式设计
|
|
10
|
+
- TypeScript 支持
|
|
11
|
+
|
|
12
|
+
## 使用场景
|
|
13
|
+
|
|
14
|
+
- 页面顶部标题展示
|
|
15
|
+
- 文章或内容页面的标题区域
|
|
16
|
+
- 需要突出显示标题的场景
|
|
17
|
+
|
|
18
|
+
## API 属性
|
|
19
|
+
|
|
20
|
+
| 属性名 | 类型 | 必填 | 默认值 | 描述 |
|
|
21
|
+
|--------|------|------|--------|------|
|
|
22
|
+
| title | string | 是 | - | 页面主标题 |
|
|
23
|
+
| subtitle | string | 否 | - | 页面副标题 |
|
|
24
|
+
| className | string | 否 | '' | 自定义CSS类名 |
|
|
25
|
+
|
|
26
|
+
## 样式类名
|
|
27
|
+
|
|
28
|
+
- `.dp-header`: 头部容器
|
|
29
|
+
- `.dp-header__title`: 主标题样式
|
|
30
|
+
- `.dp-header__subtitle`: 副标题样式
|
|
31
|
+
|
|
32
|
+
## 注意事项
|
|
33
|
+
|
|
34
|
+
1. 主标题为必填项,副标题为可选
|
|
35
|
+
2. 组件支持自定义样式类名
|
|
36
|
+
3. 建议搭配相应的CSS样式文件使用
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// 高级用法示例
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { DPHeader } from '../../../../src/components/DPHeader/DPHeader';
|
|
4
|
+
|
|
5
|
+
// 动态标题示例
|
|
6
|
+
export function DynamicHeaderDemo() {
|
|
7
|
+
const handleTitleClick = () => {
|
|
8
|
+
console.log('标题被点击了');
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div>
|
|
13
|
+
<h2>动态标题示例</h2>
|
|
14
|
+
|
|
15
|
+
<DPHeader
|
|
16
|
+
title="可交互的标题"
|
|
17
|
+
subtitle="点击查看控制台输出"
|
|
18
|
+
onClick={handleTitleClick}
|
|
19
|
+
className="interactive-header"
|
|
20
|
+
/>
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// 多语言支持示例
|
|
26
|
+
export function MultiLanguageDemo() {
|
|
27
|
+
const titles = {
|
|
28
|
+
zh: { title: "中文标题", subtitle: "这是中文副标题" },
|
|
29
|
+
en: { title: "English Title", subtitle: "This is English subtitle" },
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div>
|
|
34
|
+
<h2>多语言支持</h2>
|
|
35
|
+
|
|
36
|
+
<DPHeader
|
|
37
|
+
title={titles.zh.title}
|
|
38
|
+
subtitle={titles.zh.subtitle}
|
|
39
|
+
className="zh-header"
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
<DPHeader
|
|
43
|
+
title={titles.en.title}
|
|
44
|
+
subtitle={titles.en.subtitle}
|
|
45
|
+
className="en-header"
|
|
46
|
+
/>
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DPHeader } from '../../../../src/components/DPHeader/DPHeader';
|
|
3
|
+
|
|
4
|
+
export default function BasicDemo() {
|
|
5
|
+
return (
|
|
6
|
+
<div>
|
|
7
|
+
<h2>基础用法</h2>
|
|
8
|
+
|
|
9
|
+
{/* 仅主标题 */}
|
|
10
|
+
<DPHeader title="页面标题" />
|
|
11
|
+
|
|
12
|
+
{/* 主标题 + 副标题 */}
|
|
13
|
+
<DPHeader
|
|
14
|
+
title="欢迎来到我们的网站"
|
|
15
|
+
subtitle="这里是页面的副标题说明"
|
|
16
|
+
/>
|
|
17
|
+
|
|
18
|
+
{/* 自定义样式 */}
|
|
19
|
+
<DPHeader
|
|
20
|
+
title="自定义样式标题"
|
|
21
|
+
subtitle="带有自定义类名的标题"
|
|
22
|
+
className="custom-header"
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tool": "create_component",
|
|
3
|
+
"arguments": {
|
|
4
|
+
"componentName": "Button",
|
|
5
|
+
"componentType": "functional",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"name": "children",
|
|
9
|
+
"type": "React.ReactNode",
|
|
10
|
+
"required": true,
|
|
11
|
+
"description": "Button content"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "onClick",
|
|
15
|
+
"type": "() => void",
|
|
16
|
+
"required": false,
|
|
17
|
+
"description": "Click handler function"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "variant",
|
|
21
|
+
"type": "'primary' | 'secondary' | 'danger'",
|
|
22
|
+
"required": false,
|
|
23
|
+
"defaultValue": "'primary'",
|
|
24
|
+
"description": "Button style variant"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "disabled",
|
|
28
|
+
"type": "boolean",
|
|
29
|
+
"required": false,
|
|
30
|
+
"defaultValue": "false",
|
|
31
|
+
"description": "Whether button is disabled"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"styling": "css",
|
|
35
|
+
"includeTests": true,
|
|
36
|
+
"outputPath": "./src/components"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tool": "create_component",
|
|
3
|
+
"arguments": {
|
|
4
|
+
"componentName": "Modal",
|
|
5
|
+
"componentType": "functional",
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"name": "isOpen",
|
|
9
|
+
"type": "boolean",
|
|
10
|
+
"required": true,
|
|
11
|
+
"description": "Whether modal is visible"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "onClose",
|
|
15
|
+
"type": "() => void",
|
|
16
|
+
"required": true,
|
|
17
|
+
"description": "Function to close modal"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "title",
|
|
21
|
+
"type": "string",
|
|
22
|
+
"required": false,
|
|
23
|
+
"description": "Modal title"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "children",
|
|
27
|
+
"type": "React.ReactNode",
|
|
28
|
+
"required": false,
|
|
29
|
+
"description": "Modal content"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "size",
|
|
33
|
+
"type": "'small' | 'medium' | 'large'",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "'medium'",
|
|
36
|
+
"description": "Modal size"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"styling": "css",
|
|
40
|
+
"includeTests": false,
|
|
41
|
+
"outputPath": "./src/components"
|
|
42
|
+
}
|
|
43
|
+
}
|
package/mcp-config.json
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "phinix",
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"description": "phinix - A Model Context Protocol server for managing and generating React components",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"phinix": "src/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "node src/index.js",
|
|
12
|
+
"dev": "node --watch src/index.js",
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"mcp",
|
|
17
|
+
"model-context-protocol",
|
|
18
|
+
"react",
|
|
19
|
+
"components",
|
|
20
|
+
"code-generation"
|
|
21
|
+
],
|
|
22
|
+
"author": "Dataphin Team",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.9.0",
|
|
26
|
+
"zod": "^3.22.4"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^20.0.0"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18.0.0"
|
|
33
|
+
}
|
|
34
|
+
}
|