本项目是一个基于 Model Context Protocol (MCP) 构建的应用后端,专门为大型语言模型 (LLM) 提供对本地文件系统的安全访问能力。它允许LLM通过标准化的MCP工具接口执行文件和目录操作,但严格限制在用户指定的目录范围内,确保数据安全。

主要功能点

  • 文件读取: 读取指定文件的全部内容。
  • 多文件读取: 同时读取多个文件的内容,提高效率。
  • 文件写入: 创建新文件或覆盖现有文件。
  • 文件编辑: 执行基于行的文本替换编辑,支持通过Git风格的Diff格式预览修改内容。
  • 目录创建: 创建新的目录,支持递归创建多层目录。
  • 目录列表: 列出指定目录下的文件和子目录。
  • 目录树: 获取指定路径下文件和目录的递归树状结构(JSON格式)。
  • 文件移动/重命名: 在允许的目录范围内移动或重命名文件和目录。
  • 文件搜索: 在指定路径及其子目录中递归搜索文件名匹配项。
  • 文件信息: 获取文件或目录的详细元数据,如大小、创建时间、权限等。
  • 安全访问控制: 所有文件操作都严格限制在服务器启动时配置的“允许目录”范围内,防止LLM访问或修改未授权的文件。
  • 列出允许目录: 提供一个工具让LLM查询当前服务器允许访问的目录列表。

安装步骤

本项目通常作为 '@modelcontextprotocol/server-filesystem' 包发布。具体的安装方法取决于您使用的MCP客户端或生态系统工具(例如 'npx', 'uvx', 或特定的MCP安装管理器)。请参考您MCP客户端的文档以了解如何添加此服务器。

服务器配置

MCP服务器是作为独立的进程运行,并通过标准输入/输出(Stdio)或其他传输协议与MCP客户端通信。本服务器的核心配置是指定允许访问的目录。您需要将此服务器的启动命令和允许访问的目录列表配置到您的MCP客户端中。

MCP客户端的配置通常是JSON格式,大致如下:

{
  "mcpServers": {
    "filesystem": { // 服务器在客户端中的标识名
      "command": "mcp-server-filesystem", // 启动此服务器的可执行文件或脚本名
      "args": [
        "/path/to/your/codebase",     // 替换为服务器应允许访问的第一个目录的实际路径
        "/path/to/your/documents",    // 可以添加更多允许访问的目录
        "~/another/project/folder"    // 支持使用 ~ 表示用户主目录
        // ...根据需要添加更多目录路径
      ]
    }
    // ...其他MCP服务器配置
  }
}
  • 'server name': 在客户端中为此服务器指定一个名称(例如 'filesystem')。
  • 'command': 启动文件系统服务器的可执行文件或脚本路径。这取决于您的安装方式。
  • 'args': 必须提供至少一个参数。每个参数是一个字符串,表示服务器被授权访问的目录的路径。所有文件操作(读、写、编辑、移动、搜索等)都将被限制在这些目录及其子目录内。路径可以是绝对路径或相对于服务器启动目录的相对路径。支持使用波浪号 '~' 作为用户主目录的快捷方式。请使用适用于运行服务器的操作系统的路径格式。

基本使用方法

  1. 配置并启动服务器: 按照您MCP客户端的要求,将文件系统服务器的配置(包括 'command' 和 'args' 中的允许目录列表)添加到客户端设置中,并启动服务器。
  2. LLM访问工具: 一旦服务器成功连接到客户端,LLM应该能够发现并使用由该服务器提供的文件系统工具(例如 'read_file', 'list_directory', 'search_files', 'write_file', 'edit_file' 等)。
  3. 通过自然语言交互: 您可以通过与LLM对话来请求文件系统操作。例如:
    • “请列出 '/path/to/your/codebase' 目录下的文件。”
    • “查找 '/path/to/your/documents' 目录及其子目录中所有包含 'report' 的文件。”
    • “读取文件 '/path/to/your/codebase/README.md' 的内容。”
    • “在文件 '/path/to/your/codebase/config.json' 中查找并替换文本 'old_value' 为 'new_value'。”
    • “创建一个新目录 '/path/to/your/codebase/new_folder'。”
    • 使用 'list_allowed_directories' 工具让LLM明确知道它可以访问哪些目录。
  4. 理解限制: 请记住,LLM只能操作配置中指定的目录。如果您尝试请求访问这些目录之外的路径,服务器将返回错误。

信息

分类

数据库与文件