Skip to content

Commit 6595398

Browse files
authored
Merge pull request #3106 from DouyinFE/mcp
Mcp
2 parents 658b283 + 3502f27 commit 6595398

29 files changed

+4584
-4
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Local
2+
.DS_Store
3+
*.local
4+
*.log*
5+
6+
# Dist
7+
node_modules
8+
dist/
9+
storybook-static
10+
11+
# IDE
12+
.vscode/*
13+
!.vscode/extensions.json
14+
.idea
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# AGENTS.md
2+
3+
You are an expert in JavaScript, Rspack, Rsbuild, Rslib, and library development. You write maintainable, performant, and accessible code.
4+
5+
## Commands
6+
7+
- `npm run build` - Build the library for production
8+
- `npm run dev` - Turn on watch mode, watch for changes and rebuild the library
9+
10+
## Docs
11+
12+
- Rslib: https://rslib.rs/llms.txt
13+
- Rsbuild: https://rsbuild.rs/llms.txt
14+
- Rspack: https://rspack.rs/llms.txt
15+
16+
## Tools
17+
18+
### Rstest
19+
20+
- Run `npm run test` to test your code
Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
[ไธญๆ–‡](README-zh_CN.md) | [English](README.md)
2+
3+
# Semi MCP Server
4+
5+
ๅŸบไบŽ Model Context Protocol (MCP) SDK ๅฎž็Žฐ็š„ MCP ๆœๅŠกๅ™จ๏ผŒๆไพ› Semi Design ็ป„ไปถๆ–‡ๆกฃๅ’Œ็ป„ไปถๅˆ—่กจๆŸฅ่ฏขๅŠŸ่ƒฝใ€‚
6+
7+
## ็ฎ€ไป‹
8+
9+
Semi MCP Server ๆ˜ฏไธ€ไธช MCP (Model Context Protocol) ๆœๅŠกๅ™จ๏ผŒ้€š่ฟ‡ stdio ไผ ่พ“ๅฑ‚ไธŽๆ”ฏๆŒ MCP ๅ่ฎฎ็š„ๅฎขๆˆท็ซฏ้€šไฟกใ€‚ๅฎƒๆไพ›ไบ†่Žทๅ– Semi Design ็ป„ไปถๆ–‡ๆกฃใ€็ป„ไปถๅˆ—่กจ็ญ‰ๅŠŸ่ƒฝใ€‚
10+
11+
## ๅฎ‰่ฃ…
12+
13+
### ๅ…จๅฑ€ๅฎ‰่ฃ…
14+
15+
```bash
16+
npm install -g @douyinfe/semi-mcp
17+
```
18+
19+
### ๆœฌๅœฐๅฎ‰่ฃ…
20+
21+
```bash
22+
npm install @douyinfe/semi-mcp
23+
```
24+
25+
## ไฝฟ็”จๆ–นๆณ•
26+
27+
### ไฝœไธบๅ‘ฝไปค่กŒๅทฅๅ…ท
28+
29+
ๅ…จๅฑ€ๅฎ‰่ฃ…ๅŽ๏ผŒๅฏไปฅ็›ดๆŽฅไฝฟ็”จ๏ผš
30+
31+
```bash
32+
semi-mcp
33+
```
34+
35+
### ๅœจ MCP ๅฎขๆˆท็ซฏไธญ้…็ฝฎ
36+
37+
ๅœจๆ”ฏๆŒ MCP ็š„ๅฎขๆˆท็ซฏ๏ผˆๅฆ‚ Claude Desktop๏ผ‰ไธญ้…็ฝฎ๏ผš
38+
39+
```json
40+
{
41+
"mcpServers": {
42+
"semi-mcp": {
43+
"command": "npx",
44+
"args": ["-y", "@douyinfe/semi-mcp"]
45+
}
46+
}
47+
}
48+
```
49+
50+
ๆˆ–่€…ๅฆ‚ๆžœๅทฒๅ…จๅฑ€ๅฎ‰่ฃ…๏ผš
51+
52+
```json
53+
{
54+
"mcpServers": {
55+
"semi-mcp": {
56+
"command": "semi-mcp"
57+
}
58+
}
59+
}
60+
```
61+
62+
## ๅŠŸ่ƒฝ
63+
64+
### ๅทฅๅ…ท (Tools)
65+
66+
#### `get_semi_document`
67+
68+
่Žทๅ– Semi Design ็ป„ไปถๆ–‡ๆกฃๆˆ–็ป„ไปถๅˆ—่กจใ€‚
69+
70+
**ๅ‚ๆ•ฐ๏ผš**
71+
- `componentName` (ๅฏ้€‰): ็ป„ไปถๅ็งฐ๏ผŒไพ‹ๅฆ‚ `Button`ใ€`Input` ็ญ‰ใ€‚ๅฆ‚ๆžœไธๆไพ›๏ผŒๅˆ™่ฟ”ๅ›ž็ป„ไปถๅˆ—่กจ
72+
- `version` (ๅฏ้€‰): ็‰ˆๆœฌๅท๏ผŒไพ‹ๅฆ‚ `2.89.2-alpha.3`ใ€‚ๅฆ‚ๆžœไธๆไพ›๏ผŒ้ป˜่ฎคไฝฟ็”จ `latest`
73+
- `get_path` (ๅฏ้€‰): ๅฆ‚ๆžœไธบ `true`๏ผŒๅฐ†ๆ–‡ๆกฃๅ†™ๅ…ฅๆ“ไฝœ็ณป็ปŸไธดๆ—ถ็›ฎๅฝ•ๅนถ่ฟ”ๅ›ž่ทฏๅพ„๏ผŒ่€Œไธๆ˜ฏๅœจๅ“ๅบ”ไธญ่ฟ”ๅ›žๆ–‡ๆกฃๅ†…ๅฎนใ€‚้ป˜่ฎคไธบ `false`
74+
75+
**็คบไพ‹๏ผš**
76+
77+
่Žทๅ–็ป„ไปถๅˆ—่กจ๏ผš
78+
```json
79+
{
80+
"name": "get_semi_document"
81+
}
82+
```
83+
84+
่Žทๅ–ๆŒ‡ๅฎš็ป„ไปถๆ–‡ๆกฃ๏ผš
85+
```json
86+
{
87+
"name": "get_semi_document",
88+
"arguments": {
89+
"componentName": "Button",
90+
"version": "2.89.2-alpha.3"
91+
}
92+
}
93+
```
94+
95+
---
96+
97+
#### `get_component_file_list`
98+
99+
่Žทๅ– Semi Design ็ป„ไปถ็š„ๆ‰€ๆœ‰ๆ–‡ไปถ่ทฏๅพ„ๅˆ—่กจใ€‚
100+
101+
**ๅ‚ๆ•ฐ๏ผš**
102+
- `componentName` (ๅฟ…ๅกซ): ็ป„ไปถๅ็งฐ๏ผŒไพ‹ๅฆ‚ `Table`ใ€`DatePicker` ็ญ‰๏ผˆๅคงๅฐๅ†™ไธๆ•ๆ„Ÿ๏ผ‰
103+
- `version` (ๅฏ้€‰): ็‰ˆๆœฌๅท๏ผŒ้ป˜่ฎคไธบ `2.89.2-alpha.3`
104+
105+
**็คบไพ‹๏ผš**
106+
```json
107+
{
108+
"name": "get_component_file_list",
109+
"arguments": {
110+
"componentName": "Table"
111+
}
112+
}
113+
```
114+
115+
**่ฟ”ๅ›žๆ ผๅผ๏ผš**
116+
```
117+
็ป„ไปถ: table
118+
็‰ˆๆœฌ: 2.89.2-alpha.3
119+
ๆ€ปๆ–‡ไปถๆ•ฐ: 38
120+
121+
ๆ–‡ไปถ็ฑปๅž‹็ปŸ่ฎก:
122+
.ts: 11
123+
.tsx: 21
124+
.scss: 6
125+
126+
===== ๆ–‡ไปถๅˆ—่กจ =====
127+
128+
@douyinfe/semi-foundation/table/foundation.ts
129+
@douyinfe/semi-foundation/table/constants.ts
130+
@douyinfe/semi-ui/table/Table.tsx
131+
@douyinfe/semi-ui/table/index.tsx
132+
...
133+
```
134+
135+
---
136+
137+
#### `get_file_code`
138+
139+
่Žทๅ–ๆŒ‡ๅฎšๆ–‡ไปถ็š„ไปฃ็ ๅ†…ๅฎนใ€‚
140+
141+
**ๅ‚ๆ•ฐ๏ผš**
142+
- `filePath` (ๅฟ…ๅกซ): ๆ–‡ไปถๅฎŒๆ•ด่ทฏๅพ„๏ผŒๅฆ‚ `@douyinfe/semi-ui/table/Table.tsx`
143+
- `version` (ๅฏ้€‰): ็‰ˆๆœฌๅท๏ผŒ้ป˜่ฎคไธบ `2.89.2-alpha.3`
144+
- `fullCode` (ๅฏ้€‰): ๆ˜ฏๅฆ่Žทๅ–ๅฎŒๆ•ดไปฃ็ ๏ผˆๅŒ…ๅซๅ‡ฝๆ•ฐไฝ“๏ผ‰๏ผŒ้ป˜่ฎคไธบ `false`
145+
146+
**่กŒไธบ่ฏดๆ˜Ž๏ผš**
147+
- `.ts/.tsx` ๆ–‡ไปถไธ”่กŒๆ•ฐ >= 500๏ผšๅ‡ฝๆ•ฐไฝ“่ขซๆ›ฟๆขไธบ `{ ... }`๏ผŒๅชๆ˜พ็คบไปฃ็ ็ป“ๆž„
148+
- `.ts/.tsx` ๆ–‡ไปถไธ”่กŒๆ•ฐ < 500๏ผšๆ˜พ็คบๅฎŒๆ•ดไปฃ็ 
149+
- ๅ…ถไป–ๆ–‡ไปถ๏ผˆ`.scss` ็ญ‰๏ผ‰๏ผšๆ˜พ็คบๅฎŒๆ•ดๅ†…ๅฎน
150+
- `fullCode: true`๏ผšๅผบๅˆถๆ˜พ็คบๅฎŒๆ•ดไปฃ็ 
151+
152+
**็คบไพ‹๏ผš**
153+
```json
154+
{
155+
"name": "get_file_code",
156+
"arguments": {
157+
"filePath": "@douyinfe/semi-ui/table/Table.tsx"
158+
}
159+
}
160+
```
161+
162+
---
163+
164+
#### `get_function_code`
165+
166+
่Žทๅ–ๆŒ‡ๅฎšๆ–‡ไปถไธญๆŸไธชๅ‡ฝๆ•ฐ็š„ๅฎŒๆ•ดๅฎž็Žฐใ€‚
167+
168+
**ๅ‚ๆ•ฐ๏ผš**
169+
- `filePath` (ๅฟ…ๅกซ): ๆ–‡ไปถๅฎŒๆ•ด่ทฏๅพ„
170+
- `functionName` (ๅฟ…ๅกซ): ๅ‡ฝๆ•ฐๅ็งฐ๏ผŒๅฆ‚ `render`ใ€`handleClick` ็ญ‰
171+
- `version` (ๅฏ้€‰): ็‰ˆๆœฌๅท๏ผŒ้ป˜่ฎคไธบ `2.89.2-alpha.3`
172+
173+
**ๆ”ฏๆŒ็š„ๅ‡ฝๆ•ฐ็ฑปๅž‹๏ผš**
174+
- ๆ™ฎ้€šๅ‡ฝๆ•ฐๅฃฐๆ˜Ž: `function foo() {}`
175+
- ็ฎญๅคดๅ‡ฝๆ•ฐ: `const foo = () => {}`
176+
- ็ฑปๆ–นๆณ•: `class Foo { bar() {} }`
177+
- getter/setter: `get foo() {}` / `set foo() {}`
178+
179+
**็คบไพ‹๏ผš**
180+
```json
181+
{
182+
"name": "get_function_code",
183+
"arguments": {
184+
"filePath": "@douyinfe/semi-foundation/table/foundation.ts",
185+
"functionName": "init"
186+
}
187+
}
188+
```
189+
190+
**่ฟ”ๅ›žๆ ผๅผ๏ผš**
191+
```
192+
ๆ–‡ไปถ: @douyinfe/semi-foundation/table/foundation.ts
193+
ๅ‡ฝๆ•ฐ: init
194+
็‰ˆๆœฌ: 2.89.2-alpha.3
195+
196+
============================================================
197+
198+
init() {
199+
const dataSource = [...this.getProp('dataSource')];
200+
// ... ๅฎŒๆ•ดๅ‡ฝๆ•ฐๅฎž็Žฐ
201+
}
202+
```
203+
204+
---
205+
206+
### ๆŽจ่ไฝฟ็”จๆต็จ‹
207+
208+
1. **่Žทๅ–ๆ–‡ไปถๅˆ—่กจ**: ไฝฟ็”จ `get_component_file_list` ่Žทๅ–็ป„ไปถๆ‰€ๆœ‰ๆ–‡ไปถ
209+
2. **ๆŸฅ็œ‹ไปฃ็ ็ป“ๆž„**: ไฝฟ็”จ `get_file_code` ๆŸฅ็œ‹ๆ„Ÿๅ…ด่ถฃ็š„ๆ–‡ไปถ๏ผˆๅคงๆ–‡ไปถ่‡ชๅŠจ่ฟ‡ๆปคๅ‡ฝๆ•ฐไฝ“๏ผ‰
210+
3. **่Žทๅ–ๅ‡ฝๆ•ฐๅฎž็Žฐ**: ไฝฟ็”จ `get_function_code` ่Žทๅ–ๅ…ทไฝ“ๅ‡ฝๆ•ฐ็š„ๅฎŒๆ•ดไปฃ็ 
211+
212+
### ่ต„ๆบ (Resources)
213+
214+
#### `semi://components`
215+
216+
Semi Design ็ป„ไปถๅˆ—่กจ่ต„ๆบใ€‚
217+
218+
## ๅผ€ๅ‘
219+
220+
### ็Žฏๅขƒ่ฆๆฑ‚
221+
222+
- Node.js >= 18.0.0
223+
- npm ๆˆ– yarn
224+
225+
### ๅฎ‰่ฃ…ไพ่ต–
226+
227+
```bash
228+
npm install
229+
```
230+
231+
### ๆž„ๅปบ
232+
233+
ๆž„ๅปบ็”Ÿไบง็‰ˆๆœฌ๏ผš
234+
235+
```bash
236+
npm run build
237+
```
238+
239+
ๅผ€ๅ‘ๆจกๅผ๏ผˆ็›‘ๅฌๆ–‡ไปถๅ˜ๅŒ–ๅนถ่‡ชๅŠจ้‡ๅปบ๏ผ‰๏ผš
240+
241+
```bash
242+
npm run dev
243+
```
244+
245+
### ๆต‹่ฏ•
246+
247+
่ฟ่กŒๆต‹่ฏ•๏ผš
248+
249+
```bash
250+
npm test
251+
```
252+
253+
### ่ฟ่กŒ
254+
255+
ๆž„ๅปบๅฎŒๆˆๅŽ่ฟ่กŒๆœๅŠกๅ™จ๏ผš
256+
257+
```bash
258+
npm start
259+
```
260+
261+
ๆˆ–่€…็›ดๆŽฅ่ฟ่กŒๆž„ๅปบๅŽ็š„ๆ–‡ไปถ๏ผš
262+
263+
```bash
264+
node dist/index.js
265+
```
266+
267+
## ๆŠ€ๆœฏๆ ˆ
268+
269+
- **TypeScript**: ็ฑปๅž‹ๅฎ‰ๅ…จ็š„ JavaScript
270+
- **Rslib**: ๅฟซ้€Ÿๆž„ๅปบๅทฅๅ…ท
271+
- **@modelcontextprotocol/sdk**: MCP ๅฎ˜ๆ–น SDK
272+
273+
## ้กน็›ฎ็ป“ๆž„
274+
275+
```
276+
semi-mcp/
277+
โ”œโ”€โ”€ src/
278+
โ”‚ โ”œโ”€โ”€ index.ts # ไธปๅ…ฅๅฃๆ–‡ไปถ
279+
โ”‚ โ”œโ”€โ”€ tools/ # ๅทฅๅ…ทๅฎšไน‰
280+
โ”‚ โ”‚ โ”œโ”€โ”€ index.ts
281+
โ”‚ โ”‚ โ””โ”€โ”€ get-semi-document.ts
282+
โ”‚ โ””โ”€โ”€ utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ
283+
โ”‚ โ”œโ”€โ”€ fetch-directory-list.ts
284+
โ”‚ โ”œโ”€โ”€ fetch-file-content.ts
285+
โ”‚ โ””โ”€โ”€ get-component-list.ts
286+
โ”œโ”€โ”€ tests/ # ๆต‹่ฏ•ๆ–‡ไปถ
287+
โ”‚ โ””โ”€โ”€ get-semi-document.test.ts
288+
โ”œโ”€โ”€ dist/ # ๆž„ๅปบ่พ“ๅ‡บ
289+
โ”œโ”€โ”€ package.json
290+
โ””โ”€โ”€ README.md
291+
```
292+
293+
## ่ฎธๅฏ่ฏ
294+
295+
MIT
296+
297+
## ็›ธๅ…ณ้“พๆŽฅ
298+
299+
- [Semi Design ๅฎ˜็ฝ‘](https://semi.design)
300+
- [Model Context Protocol ๆ–‡ๆกฃ](https://modelcontextprotocol.io)

0 commit comments

Comments
ย (0)