文件编辑服务

MCP服务器提供基于hashline的文件编辑功能,通过行地址和内容哈希进行完整性验证,适用于需要精确文件修改的场景。

  • by Submersible
  • TypeScript
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 Submersible/mcp-hashline-edit-server

使用说明

mcp哈希行编辑服务器

MCP服务器提供基于哈希行的文件编辑——使用内容哈希进行行寻址编辑,以进行完整性验证。

基于 hashline编辑格式 从 哦,我的皮.

什么是Hashline?

LLM读取文件,每一行都标记有短内容哈希:

1:a3|function hello() {
2:f1|  return "world";
3:0e|}

编辑时模型引用标记——“替换行 2:f1“,”替换范围 1:a3 通过 3:0e“,”插入后面 3:0e“。如果文件自上次读取以来发生了更改,哈希值将不匹配,在损坏之前会被拒绝编辑。

模型不需要复制旧的内容/空白来标识更改。基准显示哈希线匹配或节拍 str_replace 对于大多数模型,最弱的模型获得的收益最大(高达10倍的改进)。

需求

  • 包子 运行时间(Bun.hash.xxHash32 用于行哈希)
  • ripgrep (rg)关于PATH grep 工具

安装

npm install mcp-hashline-edit-server
# or
bun add mcp-hashline-edit-server

用法

克劳德桌面

增添 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "hashline-edit": {
      "command": "bunx",
      "args": ["mcp-hashline-edit-server"]
    }
  }
}

光标

增添 .cursor/mcp.json (项目根或全局):

{
  "mcpServers": {
    "hashline-edit": {
      "command": "bunx",
      "args": ["mcp-hashline-edit-server"]
    }
  }
}

任何MCP客户端

服务器通过stdio运行:

bunx mcp-hashline-edit-server

来源

git clone https://github.com/Submerisble/mcp-hashline-edit-server.git
cd mcp-hashline-edit-server
bun install
bun run src/index.ts

工具

read_file

读取带有hashline前缀输出的文件(LINE:HASH|content).

参数 类型 说明
path string 文件路径(相对或绝对)
offset 号码? 起始行(1-索引)
limit 号码? 最大行数(默认值:2000)

edit_file

使用哈希验证的行引用编辑文件。四种编辑变体:

set_line --更换单线:

{"set_line": {"anchor": "2:f1", "new_text": "  return \"universe\";"}}

replace_lines --更换范围:

{"replace_lines": {"start_anchor": "1:a3", "end_anchor": "3:0e", "new_text": "function greet() {\n  return \"hi\";\n}"}}

insert_after --在行后插入:

{"insert_after": {"anchor": "1:a3", "text": "  // new comment"}}

replace --模糊子字符串替换(回退,不需要哈希):

{"replace": {"old_text": "return \"world\"", "new_text": "return \"universe\""}}
参数 类型 说明
path string 文件路径
edits array 编辑操作

对上次读取的文件进行原子验证的编辑。排序,自下而上自动应用。

write_file

创建或覆盖文件。

参数 类型 说明
path string 文件路径
content string 要写的内容

grep

搜索带有hashline前缀结果的文件。

参数 类型 说明
pattern string 正则表达式模式
path 弦? 文件或目录
glob 弦? 按glob过滤(例如。, *.js)
type 弦? 按文件类型筛选
i 布尔值?不区分大小写
pre 号码? 之前的上下文行
post 号码? 后面的上下文行
limit 号码? 最大匹配数(默认值:100)

需要 rg (ripgrep)在系统上。

哈希是如何工作的

  1. 条纹拖尾 \r
  2. 删除所有空格
  3. xxHash32 关于去掉空格的字符串
  4. 模数256,编码为2个字符的小写十六进制(00-ff)

哈希空格不敏感——缩进更改不会影响哈希,引用对重新格式化具有鲁棒性。

错误恢复

哈希值不匹配:错误显示已更新 LINE:HASH 参考文献 >>> 标记。复制新引用,重试。

无操作错误:替换内容与当前内容匹配。重新读取文件以了解当前状态。

许可证

麻省理工学院