项目简介

oakenai_mcp-edit-file-lines 是一个 MCP (Model Context Protocol) 服务器实现,它扩展了 LLM (大型语言模型) 的能力,使其能够安全地编辑和查询本地文件系统中的文本文件。该服务器提供了一系列工具,允许 LLM 客户端通过标准化的 MCP 协议,对允许目录下的文件内容进行精确的行级编辑、内容搜索和信息获取。这使得 LLM 应用能够与文件系统进行交互,实现代码修改、配置更新等自动化任务。

主要功能点

  • 精确的文件行编辑 (edit_file_lines): 允许 LLM 客户端通过指定行号范围和内容,对文本文件进行细粒度的修改。支持字符串匹配和正则表达式匹配,可以在保持原有文件格式的基础上,替换行内容或特定文本。提供干运行模式 (dry run) 预览更改,并生成可用于后续确认执行的状态ID。
  • 编辑批准 (approve_edit): 配合 'edit_file_lines' 的干运行模式,需要使用状态ID显式批准才能应用之前的编辑操作,确保编辑操作的安全性和可控性。
  • 文件行信息获取 (get_file_lines): 允许 LLM 客户端获取指定文件的特定行号及其周围上下文的内容,用于在编辑前验证文件内容。
  • 文件内容搜索 (search_file): 允许 LLM 客户端在指定文件中搜索文本模式或正则表达式,返回匹配的行号、内容和上下文,帮助定位需要编辑的代码行。

安装步骤

  1. 安装 Node.js 和 npm: 确保你的系统已安装 Node.js 和 npm (Node.js 包管理器)。你可以从 nodejs.org 下载并安装。

  2. 克隆仓库: 使用 Git 克隆 'oakenai_mcp-edit-file-lines' 仓库到本地:

    git clone https://github.com/MCP-Mirror/oakenai_mcp-edit-file-lines.git
    cd oakenai_mcp-edit-file-lines
  3. 安装依赖: 在仓库目录下,运行 npm 命令安装项目依赖:

    npm install
  4. 构建项目: 运行 npm 命令构建 TypeScript 项目,生成可执行的 JavaScript 代码:

    npm run build

    构建成功后,会在 'build' 目录下生成服务器代码 'index.js'。

服务器配置

要将 'oakenai_mcp-edit-file-lines' 服务器配置到 MCP 客户端(例如 Claude Desktop),你需要编辑客户端的配置文件 ('claude_desktop_config.json'),添加如下 'mcpServers' 配置:

{
  "mcpServers": {
    "edit-file-lines": {
      "command": "node",
      "args": [
        "/path/to/oakenai_mcp-edit-file-lines/build/index.js",
        "/path/to/allowed-directory"
      ],
      "env": {
        "MCP_EDIT_STATE_TTL": "300000"
      }
    }
  }
}

配置参数说明:

  • '"edit-file-lines"': 服务器名称,可以自定义,用于在客户端中标识该服务器。
  • '"command": "node"': 启动服务器的命令,这里使用 Node.js 运行 JavaScript 代码。
  • '"args"': 传递给启动命令的参数,是一个字符串数组:
    • '"/path/to/oakenai_mcp-edit-file-lines/build/index.js"': [请替换为实际路径] 指向 'index.js' 文件的绝对路径,这是构建后的服务器主程序。
    • '"/path/to/allowed-directory"': [请替换为实际路径] 必须指定允许访问的目录,服务器的所有文件操作都将限制在这个目录及其子目录内,保障安全。你可以指定多个允许目录,只需在数组中添加更多路径即可。
  • '"env"': 可选的环境变量配置:
    • '"MCP_EDIT_STATE_TTL": "300000"': [可选] 设置编辑状态 (stateId) 的有效期,单位为毫秒。默认值为 60000 毫秒 (1 分钟)。这里设置为 300000 毫秒 (5 分钟)。你可以根据需要调整有效期。

注意:

  • '/path/to/oakenai_mcp-edit-file-lines' 和 '/path/to/allowed-directory' 必须替换为你的实际文件路径。 例如,如果你的项目克隆在用户根目录下的 'my-mcp-servers/oakenai_mcp-edit-file-lines' 目录,并且你希望允许访问用户根目录下的 'my-workspace' 目录,则配置应类似:
{
  "mcpServers": {
    "edit-file-lines": {
      "command": "node",
      "args": [
        "~/my-mcp-servers/oakenai_mcp-edit-file-lines/build/index.js",
        "~/my-workspace"
      ],
      "env": {
        "MCP_EDIT_STATE_TTL": "300000"
      }
    }
  }
}
  • 安全性: 'allowed-directory' 参数至关重要。请务必仔细设置允许访问的目录,避免将敏感目录暴露给 LLM 客户端。

基本使用方法

配置完成后,你的 MCP 客户端 (如 Claude Desktop) 应该能够连接到 'oakenai_mcp-edit-file-lines' 服务器并使用其提供的工具。以下是一些基本的使用示例,你可以通过 MCP 客户端向服务器发送 JSON-RPC 请求来调用这些工具。

1. 获取文件行信息 (get_file_lines)

{
  "method": "tools/call",
  "params": {
    "name": "get_file_lines",
    "arguments": {
      "path": "src/components/App.tsx",  // 文件路径,相对于 allowed-directory
      "lineNumbers": [ 1, 2, 3 ],        // 要获取的行号
      "context": 1                       // 上下文行数
    }
  }
}

2. 搜索文件内容 (search_file)

{
  "method": "tools/call",
  "params": {
    "name": "search_file",
    "arguments": {
      "path": "src/components/App.tsx",  // 文件路径,相对于 allowed-directory
      "pattern": "const",                 // 搜索模式 (文本或正则表达式)
      "type": "text",                    // 搜索类型,可选 "text" 或 "regex"
      "contextLines": 2                  // 上下文行数
    }
  }
}

3. 编辑文件行 (edit_file_lines) - 干运行

{
  "method": "tools/call",
  "params": {
    "name": "edit_file_lines",
    "arguments": {
      "p": "src/components/App.tsx",      // 文件路径,相对于 allowed-directory
      "e": [                               // 编辑操作数组
        {
          "startLine": 2,                   // 起始行号
          "endLine": 2,                     // 结束行号
          "content": "primary",             // 替换内容
          "strMatch": "blue"               // 匹配的字符串
        }
      ],
      "dryRun": true                      // 干运行模式
    }
  }
}

4. 批准编辑 (approve_edit)

在 'edit_file_lines' 干运行后,如果输出结果中包含 'State ID: xxxxxxxx',则可以使用 'approve_edit' 工具应用更改:

{
  "method": "tools/call",
  "params": {
    "name": "approve_edit",
    "arguments": {
      "stateId": "xxxxxxxx"             // 上一步干运行返回的状态ID
    }
  }
}

详细使用方法和参数说明,请参考仓库的 README.md 文件。

信息

分类

开发者工具