Skip to main content
Glama
README.md•24 kB
# MCP Workspace Server **[English](./README_EN.md)** | **äž­æ–‡** [![License](https://img.shields.io/github/license/safurrier/mcp-filesystem.svg)](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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/answerlink/MCP-Workspace-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server