# MCP Workspace Server
**[English](./README_EN.md)** | **äžæ**
[](LICENSE)
ð **åªéäžäžª MCPïŒå°±èœå®ç°äœ çå®æŽ Agent èœåïŒ**
**è¶
è¶æä»¶ç³»ç»ç AI åŒåç¯å¢** - 让 AI å Claude Code äžæ ·è¿è¡å®æŽç Web åŒåãæ°æ®å€çåä»£ç æ§è¡
> ð¡ **æ žå¿ä»·åŒ**ïŒæ ééæå€äžª MCP å·¥å
·ïŒ**äžäžª MCP æå¡åš**å³å¯æäŸæä»¶æäœãä»£ç æ§è¡ãWeb éšçœ²ãæ°æ®å€çãåŸåçæç宿Žç Agent èœåãåŒç®±å³çšïŒäžç«åŒè§£å³æ¹æ¡ã
äžäžªåèœåŒºå€§ç MCP (Model Context Protocol) æå¡åšïŒäžä»
æäŸå®å
šçæä»¶ç³»ç»æäœïŒæŽæ¯äžäžª**宿Žç AI åŒåå·¥äœç©ºéŽ**ãæ¯æä»£ç æ§è¡ãWeb åºçšäžé®éšçœ²ãæ³åå访é®ãExcel å€çãåŸåçæçäŒäžçº§èœåã
## ⚠䞺ä»ä¹éæ©æä»¬ïŒ
### ð¯ äžäžª MCPïŒå®æŽ Agent èœå
**äŒ ç»æ¹æ¡**ïŒéèŠéæå€äžª MCP å·¥å
·æèœå®ç°å®æŽåèœ
- â æä»¶æäœ â éèŠäžäžª MCP
- â ä»£ç æ§è¡ â éèŠåŠäžäžª MCP
- â Web éšçœ² â éèŠç¬¬äžäžª MCP
- â æ°æ®å€ç â éèŠç¬¬å䞪 MCP
- â åŸåçæ â éèŠç¬¬äºäžª MCP
- **ç»æ**ïŒé
çœ®å€æã绎æ€å°éŸãåèœåæ£
**æä»¬çæ¹æ¡**ïŒåªéäžäžª MCPïŒææèœååŒç®±å³çš
- â
**æä»¶æäœ** + **ä»£ç æ§è¡** + **Web éšçœ²** + **æ°æ®å€ç** + **åŸåçæ**
- â
**ç»äžé
眮**ïŒäžæ¬¡é
眮ïŒå
šéšå¯çš
- â
**ç»äžç®¡ç**ïŒäžäžªæå¡ïŒéäžç®¡ç
- â
**ç»äžå®å
š**ïŒäžå¥å®å
šçç¥ïŒå
šé¢ä¿æ€
æä»¬æäŸçæ¯**宿Žç AI åŒåå·¥äœç©ºéŽ**ïŒèœåè¿è¶
äŒ ç»æä»¶ç³»ç»æå¡åšïŒ
- ð **Web åŒåèœå**ïŒAI å¯ä»¥åå»ºå®æŽç Web åºçšïŒHTML/CSS/JSïŒïŒå¹¶**äžé®éšçœ²å°ç产ç¯å¢**
- ð **æ³ååéšçœ²**ïŒæ¯æ `*.your-domain.com` æ³ååïŒæ¯äžªäŒè¯èªåšè·åŸç¬ç«ååå访é®
- ð» **ä»£ç æ§è¡**ïŒå
眮 Python 3.12 å Node.js 20 æ²çç¯å¢ïŒæ¯æä»£ç 宿¶æ§è¡åè°è¯
- ð **æ°æ®å€ç**ïŒå®æŽç Excel/CSV å€çèœåïŒæ¯ææš¡æ¿ãå
¬åŒãæ ŒåŒå
- ðš **åŸåçæ**ïŒæ¯æ Mermaid æµçšåŸãæ°æ®åŸè¡šãHTML æž²æçå€ç§åŸåçææ¹åŒ
- ð **æºèœæçŽ¢**ïŒæä»¶å
容æçŽ¢ãç¥è¯åºæ£çŽ¢ãçœé¡µæåçé«çº§èœå
- ð **äŒäžçº§å®å
š**ïŒå€ç§æ·é犻ãè·¯åŸå®å
šé²æ€ãèµæºéå¶ãæ²çæ§è¡
### ð All-in-One äŒå¿
| äŒ ç»æ¹æ¡ | æä»¬çæ¹æ¡ |
|---------|-----------|
| éèŠ 5+ 䞪 MCP å·¥å
· | **åªé 1 䞪 MCP** |
| é
çœ®å€æïŒéèŠéäžªéæ | **åŒç®±å³çšïŒäžé®é
眮** |
| åèœåæ£ïŒéŸä»¥ç»äžç®¡ç | **åèœéäžïŒç»äžç®¡ç** |
| å®å
šçç¥äžç»äž | **ç»äžå®å
šçç¥** |
| ç»Žæ€ææ¬é« | **绎æ€ç®å** |
**äžå¥è¯æ»ç»**ïŒäžäžª MCP æå¡åš = 宿Žç Agent èœåæ ð
### ð¡ å
žå䜿çšåºæ¯
**åºæ¯ 1ïŒAI 驱åšç Web åŒå**
```
AI åå»ºå®æŽçå端åºçš â äžé®éšçœ² â è·åŸç¬ç«åå访é®
äŸåŠïŒhttps://user123_chat456.your-domain.com
```
**åºæ¯ 2ïŒæ°æ®åæäžå¯è§å**
```
读å Excel â æ°æ®å€ç â çæåŸè¡š â å建æ¥å â éšçœ²å±ç€ºé¡µé¢
```
**åºæ¯ 3ïŒä»£ç åŒåäžæµè¯**
```
çŒå Python èæ¬ â æ§è¡æµè¯ â ä¿®å€ Bug â éšçœ² API æå¡
```
## âš æ žå¿ç¹æ§
### ð å€ç§æ·äŒè¯é犻
æ¯äžªçšæ·/äŒè¯æ¥æç¬ç«çèæå·¥äœç©ºéŽïŒå®å
šé犻ïŒäºäžå¹²æ°ã
**å·¥äœç®åœåœåè§åïŒ**
| X-User-ID | X-Chat-ID | å·¥äœç®åœ |
|----------|-----------|----------|
| `user123` | `chat456` | `user_data/user123_chat456/` |
| `user123` | (空) | `user_data/user123/` |
| (空) | `chat456` | `user_data/chat456/` |
| (空) | (空) | 䜿çšé»è®€å
šå±æš¡åŒ |
éè¿ HTTP 请æ±å€ŽäŒ é身仜æ è¯ïŒ
- `X-User-ID`: çšæ·å¯äžæ è¯ïŒå¯éïŒ
- `X-Chat-ID`: äŒè¯å¯äžæ è¯ïŒå¯éïŒ
### ð¡ïž èæè·¯åŸç³»ç»
**LLM è§è§å®å
šèæå**ïŒAI æš¡åçå°çæ¯äžäžªå¹²åçèææä»¶ç³»ç»ïŒä»¥ `/` äžºæ ¹ç®åœã
```
LLM çå°çè·¯åŸ å®é
ç©çè·¯åŸ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
/ â /server/user_data/user123_chat456/
/todo.txt â /server/user_data/user123_chat456/todo.txt
/docs/readme.md â /server/user_data/user123_chat456/docs/readme.md
```
**äŒå¿ïŒ**
- â
äžæŽé²æå¡åšçå®ç®åœç»æ
- â
AI 平尿 æ³è·ç¥ç©çè·¯åŸä¿¡æ¯
- â
ç®å AI çæä»¶æäœæä»€
- â
æåå®å
šæ§åéç§ä¿æ€
### ð è·¯åŸå®å
šé²æ€
å
眮å€å±å®å
šæºå¶ïŒé²æ¢è·¯åŸéåæ»å»ïŒ
```
æ»å»å°è¯ ç»æ
âââââââââââââââââââââââââââââââââââââââââââââââââ
/../../../etc/passwd â è¢«é»æ¢
../../../etc/passwd â è¢«é»æ¢
/foo/../../../etc/passwd â è¢«é»æ¢
/foo/bar/../../.. â è¢«é»æ¢
```
**å®å
šæºå¶ïŒ**
1. **è·¯åŸè§£æ**ïŒäœ¿çš `Path.resolve()` è§£æææ `..` å笊å·éŸæ¥
2. **èŸ¹çæ£æ¥**ïŒéªè¯è§£æåçè·¯åŸæ¯åŠåšå
讞èåŽå
3. **åéä¿æ€**ïŒå³äœ¿è·¯åŸè¢«è§£æïŒä»å¿
é¡»åš `allowed_dirs` å
### ð¡ SSE äŒ èŸåè®®
æ¯æ Server-Sent Events (SSE) äŒ èŸïŒéé
åç±» AI å¹³å°ïŒ
```
客æ·ç«¯ æå¡åš
â â
âââââ GET /sse âââââââââââââââââââââââ¶â å»ºç« SSE è¿æ¥
âââââ SSE: endpoint=/messages?sid=xxx â è¿åæ¶æ¯ç«¯ç¹
â â
âââââ POST /messages?session_id=xxx ââ¶â åéå·¥å
·è°çš
âââââ SSE: message (ååº) ââââââââââââ æ¥æ¶ç»æ
```
### ð äžé®éšçœ²äžæ³å忝æ
**äžé®éšçœ² Web åºçš**ïŒ
- AI å建çå端项ç®å¯éè¿ `preview_frontend` å·¥å
·äžé®éšçœ²
- èªåšçæå¯è®¿é®ç URLïŒæ¯æ HTTPS
- æ¯æèªå®ä¹å
¥å£æä»¶åç®åœç»æ
**æ³ååéšçœ²ïŒç产ç¯å¢ïŒ**ïŒ
```json
{
"preview": {
"wildcard_domain": "*.proxy.your-domain.com",
"use_tls": true
}
}
```
é
眮åïŒæ¯äžªäŒè¯èªåšè·åŸç¬ç«åååïŒ
- `user123_chat456.proxy.your-domain.com`
- `user789_chat012.proxy.your-domain.com`
**äŒå¿**ïŒ
- â
æ éæåšé
眮ååå端å£
- â
èªåšé犻ïŒäºäžå¹²æ°
- â
æ¯æ HTTPSïŒç产就绪
- â
åç«¯å£æå¡ïŒç®åéšçœ²
## ðР宿Žåèœå衚
### ð» Web åŒåäžéšçœ²
| å·¥å
· | åèœ | äº®ç¹ |
|------|------|------|
| `fs_write` | å建 Web æä»¶ïŒHTML/CSS/JSïŒ | èªåšè¯å«æ ŒåŒïŒæ¯æå®æŽåç«¯é¡¹ç® |
| `preview_frontend` | äžé®éšçœ²éæå端 | **æ¯ææ³ååïŒèªåšçæç¬ç«ååå** |
| `exec` | æ§è¡ Python/Node.js 代ç | æ²çç¯å¢ïŒæ¯æå®æ¶è°è¯ |
| `generate_image` | çæåŸè¡šåæµçšåŸ | Mermaidãæ°æ®å¯è§åãHTML æž²æ |
### ð æä»¶ç³»ç»æäœ
| å·¥å
· | åèœ |
|------|------|
| `fs_read` | 读åæä»¶ïŒæ¯ææ¹éãExcelãè¡èåŽïŒ |
| `fs_write` | å建/èŠçæä»¶ïŒèªåšè¯å«æ ŒåŒïŒ |
| `fs_ops` | æä»¶ç³»ç»æäœïŒlist/mkdir/move/info/deleteïŒ |
| `fs_replace` | åºäº SEARCH/REPLACE 粟确çŒèŸæä»¶ |
| `fs_search` | æçŽ¢æä»¶ïŒglob=ææä»¶åïŒcontent=æå
容æ£åïŒ |
### ð Excel æ°æ®å€ç
| å·¥å
· | åèœ |
|------|------|
| `fs_read` | 读å Excel æä»¶ïŒæ¯æ sheetãrange åæ°ïŒ |
| `fs_write` | å建/èŠç Excel æä»¶ïŒèªåšè¯å«æ ŒåŒïŒ |
| `excel_edit` | çŒèŸ ExcelïŒæ¹éæŽæ°åå
æ Œãæ ŒåŒåïŒ |
| `list_excel_templates` | ååºå¯çš Excel æš¡æ¿ |
| `create_excel_from_template` | ä»æš¡æ¿å建 Excel æä»¶ |
### ð é«çº§èœåïŒå¯éïŒ
| å·¥å
· | åèœ | é
眮项 |
|------|------|--------|
| `kb_search` | äŒäžç¥è¯åº glob æçŽ¢ | `kb.enabled=true` |
| `kb_read` | 读åç¥è¯åºæä»¶ïŒè¿å MarkdownïŒ | `kb.enabled=true` |
| `crawl_url` | æåçœé¡µå¹¶è¿å Markdown | `web_crawl.enabled=true` |
| `web_search` | èçœæçŽ¢ | `web_search.enabled=true` |
## ð äž AI å¹³å°éæ
### ð¯ 䞺ä»ä¹éæ©æä»¬äœäžºäœ ç MCP ServerïŒ
**æä»¬æ¯åŒºå€§ç All-in-One MCP Server**ïŒåªéäžæ¬¡é
眮ïŒå³å¯äžºäœ ç AI 平尿äŸå®æŽç Agent èœåïŒ
- â
**æä»¶æäœ**ïŒè¯»åãæçŽ¢ãçŒèŸæä»¶
- â
**ä»£ç æ§è¡**ïŒPython/Node.js æ²çç¯å¢
- â
**Web éšçœ²**ïŒäžé®éšçœ²å端åºçšïŒæ¯ææ³åå
- â
**æ°æ®å€ç**ïŒExcel/CSV 宿Žå€çèœå
- â
**åŸåçæ**ïŒMermaid æµçšåŸãæ°æ®åŸè¡š
- â
**æºèœæçŽ¢**ïŒç¥è¯åºæ£çŽ¢ãçœé¡µæåïŒå¯éïŒ
**æ ééæå€äžª MCP å·¥å
·**ïŒäžäžª MCP Server å³å¯æ»¡è¶³ææéæ±ïŒ
### ð æ¯æç AI å¹³å°
æä»¬äžäž»æµ AI å¹³å°å®çŸéæïŒé
眮ç®åïŒåŒç®±å³çšïŒ
#### Dify
1. **è¿å
¥ Dify å·¥äœæµé
眮**
- æ·»å **MCP Tool** èç¹
- éæ© **SSE** äŒ èŸåè®®
2. **é
眮 MCP Server è¿æ¥**
```
SSE å°å: http://your-server:8000/sse
```
3. **讟眮请æ±å€ŽïŒå€ç§æ·é犻ïŒ**
```
X-User-ID: {{user_id}}
X-Chat-ID: {{conversation_id}}
```
4. **宿ïŒ** ç°åšäœ ç Dify Agent æ¥æå®æŽçæä»¶æäœãä»£ç æ§è¡ãWeb éšçœ²çèœåã
#### FastGPT
1. **è¿å
¥ FastGPT ç¥è¯åº/åºçšé
眮**
- æ·»å **å€éšå·¥å
·** â **MCP**
- äŒ èŸæ¹åŒéæ© **SSE**
2. **é
çœ®è¿æ¥ä¿¡æ¯**
```
MCP Server URL: http://your-server:8000/sse
```
3. **é
çœ®çšæ·æ è¯ïŒå¯éïŒçšäºå€ç§æ·é犻ïŒ**
```
èªå®ä¹ Header:
X-User-ID: {{userId}}
X-Chat-ID: {{chatId}}
```
4. **å¯çšå·¥å
·**ïŒææå·¥å
·èªåšå¯çšïŒæ éé䞪é
眮ïŒ
#### Cherry Studio
1. **è¿å
¥ Cherry Studio 讟眮**
- æåŒ **MCP Servers** é
眮
- æ·»å æ°ç MCP Server
2. **é
çœ®è¿æ¥**
```json
{
"name": "MCP Workspace Server",
"transport": "sse",
"url": "http://your-server:8000/sse"
}
```
3. **讟眮äŒè¯æ è¯ïŒå€ç§æ·æ¯æïŒ**
- Cherry Studio äŒèªåšäŒ éçšæ·åäŒè¯ä¿¡æ¯
- æ¯äžªäŒè¯è·åŸç¬ç«çå·¥äœç©ºéŽ
### ð¡ éæäŒå¿
| äŒ ç»æ¹æ¡ | äœ¿çšæä»¬ç All-in-One MCP |
|---------|---------------------------|
| éèŠé
眮 5+ 䞪äžåç MCP å·¥å
· | **åªéé
眮 1 䞪 MCP Server** |
| æ¯äžªå·¥å
·éèŠåç¬è¿æ¥åè®€è¯ | **äžæ¬¡é
眮ïŒå
šéšå¯çš** |
| å·¥å
·ä¹éŽåèœåæ£ïŒéŸä»¥ç»äžç®¡ç | **åèœéäžïŒç»äžç®¡ç** |
| äžåå·¥å
·çå®å
šçç¥äžäžèŽ | **ç»äžå®å
šçç¥ïŒå
šé¢ä¿æ€** |
| 绎æ€å€äžªæå¡çææ¬é« | **绎æ€ç®åïŒäžäžªæå¡æå®** |
### ð åŒç®±å³çšçèœå
é
çœ®å®æåïŒäœ ç AI Agent ç«å³æ¥æïŒ
- ð **æä»¶æäœ**ïŒå建ã读åãçŒèŸãæçŽ¢æä»¶
- ð» **ä»£ç æ§è¡**ïŒè¿è¡ Python/Node.js èæ¬ïŒå®æ¶è°è¯
- ð **Web åŒå**ïŒå建å端åºçšå¹¶äžé®éšçœ²å°ç产ç¯å¢
- ð **æ°æ®å€ç**ïŒè¯»åãçŒèŸ ExcelïŒçææ¥å
- ðš **åŸåçæ**ïŒå建æµçšåŸãæ°æ®å¯è§ååŸè¡š
- ð **æºèœæçŽ¢**ïŒæä»¶å
容æçŽ¢ãç¥è¯åºæ£çŽ¢ïŒåŠå¯çšïŒ
**äžäžª MCP Server = 宿Žç Agent èœåæ ** ð
## ð å¿«éåŒå§
### Docker éšçœ²ïŒæšèïŒ
```bash
# å
é项ç®
git clone <repository-url>
cd mcp-filesystem
# éŠæ¬¡éšçœ²ïŒæå»ºéåå¹¶å¯åš
docker-compose up -d --build
> åŠææ æ³äœ¿çšdockeréåæºïŒå¯ä»¥å
æ§è¡ export DOCKER_BUILDKIT=0
# æŽæ°ä»£ç åéå¯çæ
git pull && docker-compose restart
# æ¥çæ¥å¿
docker-compose logs -f
# ä»
åœäŸèµååæ¶éèŠéæ°æå»º
docker-compose up -d --build
```
> ð¡ éåå
å«è¿è¡ç¯å¢ïŒä»£ç éè¿ volume æèœœïŒæŽæ°ä»£ç åªé `git pull && docker-compose restart`
> â ïž **éèŠè¯Žæ**ïŒæ¬é¡¹ç®è¿è¡ç¯å¢é«åºŠäŸèµ Docker åºç¡éåïŒå
å«å®æŽç Python 3.12ãNode.js 20 è¿è¡ç¯å¢ä»¥åææç³»ç»äŸèµïŒåŠ Tesseract OCRãåŸåå€çåºçïŒã**区çå»ºè®®äœ¿çš Docker æ¹åŒéšçœ²**ïŒäžæšèæ¬å° Python çŽæ¥è¿è¡ãåŠéæ¬å°åŒåïŒè¯·ç¡®ä¿å·²å®è£
ææç³»ç»äŸèµã
### å¿«éé
眮åè
> ð **诊ç»éæè¯Žæ**ïŒè¯·æ¥çäžæ¹ç [ð äž AI å¹³å°éæ](#-äž-ai-å¹³å°éæ) ç« èïŒå
å« DifyãFastGPTãCherry Studio ç宿Žé
眮æ¥éª€ã
**å¿«éè¿æ¥ä¿¡æ¯**ïŒ
- **SSE å°å**: `http://your-server:8000/sse`
- **请æ±å€Ž**ïŒå€ç§æ·é犻ïŒ:
- `X-User-ID`: `{{userId}}` æåºå®çšæ·ID
- `X-Chat-ID`: `{{chatId}}` æåºå®äŒè¯ID
**Claude DesktopïŒSTDIO æš¡åŒïŒ**ïŒ
çŒèŸé
眮æä»¶ïŒ
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"mcp-workspace": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-filesystem",
"run",
"run_server.py",
"/path/to/allowed/dir1",
"/path/to/allowed/dir2"
]
}
}
}
```
## ðïž æ¶æè®Ÿè®¡
```
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â AI å¹³å° (Dify / FastGPT / Cherry Studio) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
â SSE + HTTP POST
â Headers: X-User-ID, X-Chat-ID
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â MCP Workspace Server (All-in-One) â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â äŒè¯ç®¡ç & 身仜è¯å« â â
â â (user_id + chat_id â workspace_name) â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â èæè·¯åŸèœ¬æ¢å± â â
â â /todo.txt â /user_data/xxx/todo.txt â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â è·¯åŸå®å
šéªè¯ â â
â â PathValidator + è·¯åŸéå鲿€ â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â æä»¶æäœæ§è¡ â â
â â FileOperations / AdvancedFileOperations â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ç©çæä»¶ç³»ç» â
â user_data/ â
â âââ user1_chat1/ â
â â âââ todo.txt â
â â âââ docs/ â
â âââ user1_chat2/ â
â âââ user2_chat1/ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
## ð§ 管çå API
æäŸ HTTP æ¥å£çšäºçæ§ãè°è¯åè¿ç»Žã
### ð 讀è¯é
眮
Admin API éèŠ Bearer Token 讀è¯ãéŠå
é
眮 `config.json`ïŒ
```bash
# å€å¶ç€ºäŸé
眮æä»¶
cp config.example.json config.json
# çŒèŸé
眮ïŒè®Ÿçœ®äœ ç管çåå¯é¥
vim config.json
```
```json
{
"admin_token": "your-secret-admin-token-here"
}
```
ææ Admin API 请æ±å¿
é¡»æºåžŠ `Authorization` 倎ïŒ
```bash
curl -H "Authorization: Bearer your-secret-admin-token-here" \
http://localhost:8000/admin/stats
```
> â ïž **å®å
šæç€º**ïŒ`config.json` 已添å å° `.gitignore`ïŒè¯·å¿å°å
¶æäº€å°çæ¬åºã
### è·åæå¡åšç»è®¡ä¿¡æ¯
```http
GET /admin/stats
Authorization: Bearer <admin_token>
```
**ååºç€ºäŸïŒ**
```json
{
"success": true,
"user_data_dir": "/path/to/user_data",
"total_workspaces": 15,
"unique_users": 8,
"total_size_bytes": 1048576,
"total_size_human": "1.00 MB",
"active_sessions": 3
}
```
### ååºææå·¥äœç©ºéŽ
```http
GET /admin/workspaces
GET /admin/workspaces?user_id=user123
Authorization: Bearer <admin_token>
```
### è·åå·¥äœç©ºéŽè¯Šæ
```http
GET /admin/workspace/{workspace_id}
GET /admin/workspace/{workspace_id}/tree?max_depth=5
Authorization: Bearer <admin_token>
```
### å é€å·¥äœç©ºéŽ
```http
DELETE /admin/workspace/{workspace_id}?confirm=yes
Authorization: Bearer <admin_token>
```
â ïž **èŠå**ïŒæ€æäœäžå¯éïŒå¿
须添å `?confirm=yes` åæ°æèœæ§è¡å é€ã
## ð€ çšæ·å·¥äœç©ºéŽ API
äžºçšæ·æäŸæ é管çå Token çå·¥äœç©ºéŽç®åœæ æ¥è¯¢ã
```http
GET /api/workspace/tree?user_id={user_id}&chat_id={chat_id}&max_depth=5
```
- äžéèŠ `Authorization` 倎
- ä»
è¿åå¯¹åº `user_id + chat_id` ç»åçå·¥äœç©ºéŽ
- æ¯äžªç®åœå±çº§ææè¿ä¿®æ¹æ¶éŽæåºïŒä»
ä¿çå 20 䞪æä»¶/æä»¶å€¹ïŒå
¶äœçŽæ¥è¿æ»€ä»¥èç垊宜
## ð§© Excel é
眮
- `config.json`/`config.example.json` æ°å¢ `excel` 段èœïŒçšäºè®Ÿçœ®æå€§æä»¶å€§å°ãé»è®€è¯»åè¡æ°ãæ¯ææ ŒåŒäžå
¬åŒæ£æµåŒå
³ã
- æš¡æ¿ïŒ`excel.templates_file` é»è®€æå `excel_templates/templates.json`ïŒæš¡æ¿æºæä»¶æŸåš `excel_templates/`ïŒå¯¹å€åªæŽé² `title/desc`ïŒ`create_excel_from_template` äŒèªåšé¿åŒéåãéŠæ¬¡äœ¿çšæ¶ïŒè¯·ä» `templates_example.json` å€å¶å建 `templates.json`ïŒå¹¶æ ¹æ®å®é
æ
åµé
眮暡æ¿è·¯åŸã
- ç¯å¢åéèŠçïŒ`MCP_EXCEL_MAX_ROWS`ã`MCP_EXCEL_MAX_SIZE_MB`ã
- 诊ç»åæ°äžç€ºäŸè§ `docs/EXCEL_TOOLS.md`ã
## âïž å¯åšé
眮
- `config.json` äžæ°å¢ `mcp` 段èœïŒå¯é
眮 `transport`ïŒé»è®€ `sse`ïŒã`host`ïŒé»è®€ `0.0.0.0`ïŒã`port`ïŒé»è®€ `18089`ïŒã
- CLI åæ° `--transport/--host/--port` äŒå
级é«äºé
眮æä»¶ã
- Web 管ççé¢ïŒ`config.json` æ°å¢ `admin_web` 段èœïŒ`enabled` é»è®€ `false`ïŒ`password` é»è®€ `123456`ïŒãåŒå¯åè®¿é® `http://<host>:<port>/admin`ïŒèŸå
¥å¯ç 坿¥ç user_data äžæä»¶æ å¹¶é¢è§ææ¬/Markdown/CSVã
## ð 䜿çšç€ºäŸ
### ð Web åŒå宿޿µçš
**æ¥éª€ 1ïŒå建å端项ç®**
```
Tool: fs_write
Arguments: {
"path": "/index.html",
"content": "<!DOCTYPE html>..."
}
```
**æ¥éª€ 2ïŒäžé®éšçœ²**
```
Tool: preview_frontend
Arguments: {
"entry_file": "index.html"
}
```
**è¿åç»æ**ïŒ
```json
{
"success": true,
"url": "https://user123_chat456.proxy.your-domain.com/index.html",
"subdomain": "user123_chat456"
}
```
**æ¥éª€ 3ïŒè®¿é®éšçœ²çåºçš**
- èªåšè·åŸç¬ç«ååå
- æ¯æ HTTPSïŒåŠé
眮ïŒ
- æ éæåšé
眮端å£ååå
### ð» ä»£ç æ§è¡äžè°è¯
### 读åæä»¶ïŒæ¯æè¡èåŽïŒ
```
Tool: fs_read
Arguments: {
"path": "/file.txt",
"line_range": "100:150" # 读å第100-150è¡
}
```
### æ¹é读åæä»¶
```
Tool: fs_read
Arguments: {
"path": ["/file1.txt", "/file2.json", "/data.xlsx"]
}
```
### æçŽ¢æä»¶
```
Tool: fs_search
Arguments: {
"search_type": "content", # glob=ææä»¶å, content=æå
容
"pattern": "function\\s+\\w+\\(",
"context_lines": 2 # è¿åå¹é
è¡åå2è¡äžäžæ
}
```
### 粟确çŒèŸæä»¶
```
Tool: fs_replace
Arguments: {
"path": "/config.py",
"diff": "------- SEARCH\nDEBUG = True\n========\nDEBUG = False\n+++++++ REPLACE"
}
```
### æ§è¡ Python 代ç
```
Tool: exec
Arguments: {
"code": "print('Hello, World!')"
}
```
### æ§è¡ Python æä»¶
```
Tool: exec
Arguments: {
"file": "/script.py",
"args": ["--verbose", "input.txt"]
}
```
### 读å Excel æä»¶
```
Tool: fs_read
Arguments: {
"path": "/data.xlsx",
"sheet": "Sheet1", # å¯éïŒæå®å·¥äœè¡š
"range": "A1:D100" # å¯éïŒæå®è¯»åèåŽ
}
```
### å建 Excel æä»¶
```
Tool: fs_write
Arguments: {
"path": "/output.xlsx",
"content": [
["Name", "Age", "City"],
["Alice", 30, "Beijing"],
["Bob", 25, "Shanghai"]
]
}
```
### çŒèŸ Excel æä»¶
```
Tool: excel_edit
Arguments: {
"path": "/data.xlsx",
"edit_type": "cells",
"sheet": "Sheet1",
"updates": [
{"cell": "A1", "value": "Updated Value"}
]
}
```
### ðš çæåŸè¡šåæµçšåŸ
```
Tool: generate_image
Arguments: {
"mermaid_code": "flowchart TD\nA[åŒå§] --> B[å€ç] --> C[ç»æ]"
}
```
æäœ¿çš HTML æž²æå€æåŸè¡šïŒ
```
Tool: generate_image
Arguments: {
"html_code": "<html><body><h1>æ°æ®å¯è§å</h1>...</body></html>"
}
```
## ð å®å
šæäœ³å®è·µ
1. **ç产ç¯å¢éšçœ²**
- 䜿çšåå代çïŒNginxïŒå€ç HTTPS
- éå¶è®¿é® IP æäœ¿çš API å¯é¥è®€è¯
- 讟眮åçç请æ±é¢çéå¶
2. **æ°æ®é犻**
- ç¡®ä¿ `X-User-ID` å `X-Chat-ID` ç±å¯ä¿¡æ¥æºçæ
- 宿æž
çè¿æçäŒè¯å·¥äœç®åœ
3. **Admin API ä¿æ€**
```nginx
location /admin/ {
allow 10.0.0.0/8;
deny all;
proxy_pass http://localhost:8000;
}
```
## âïž ç¯å¢åé
| åéå | 诎æ | é»è®€åŒ |
|--------|------|--------|
| `MCP_WORKSPACES_DIR` | çšæ·å·¥äœç©ºéŽæ ¹ç®åœ | `项ç®ç®åœ/user_data` |
| `MCP_ALLOWED_DIRS` | å
讞访é®çç®åœå衚ïŒå
šå±æš¡åŒïŒ | åœåå·¥äœç®åœ |
| `FASTMCP_PORT` | æå¡åšç«¯å£ | `8000` |
## ð 讞å¯è¯
[Apache License 2.0](LICENSE)
## ð€ 莡ç®
æ¬¢è¿æäº€ Issue å Pull RequestïŒ