mcp哈希行编辑服务器
MCP服务器提供基于哈希行的文件编辑——使用内容哈希进行行寻址编辑,以进行完整性验证。
什么是Hashline?
LLM读取文件,每一行都标记有短内容哈希:
1:a3|function hello() {
2:f1| return "world";
3:0e|}编辑时模型引用标记——“替换行 2:f1“,”替换范围 1:a3 通过 3:0e“,”插入后面 3:0e“。如果文件自上次读取以来发生了更改,哈希值将不匹配,在损坏之前会被拒绝编辑。
模型不需要复制旧的内容/空白来标识更改。基准显示哈希线匹配或节拍 str_replace 对于大多数模型,最弱的模型获得的收益最大(高达10倍的改进)。
需求
安装
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)在系统上。
哈希是如何工作的
- 条纹拖尾
\r - 删除所有空格
xxHash32关于去掉空格的字符串- 模数256,编码为2个字符的小写十六进制(
00-ff)
哈希空格不敏感——缩进更改不会影响哈希,引用对重新格式化具有鲁棒性。
错误恢复
哈希值不匹配:错误显示已更新 LINE:HASH 参考文献 >>> 标记。复制新引用,重试。
无操作错误:替换内容与当前内容匹配。重新读取文件以了解当前状态。
