SearchReplaceMcp
 ](https://www.nuget.org/packages/SearchReplaceMcp) ](https://www.nuget.org/packages/SearchReplaceMcp) 
一种搜索和替换工具,可以分阶段进行替换并安全应用。既可作为CLI工具,又可作为AI代理的MCP(模型上下文协议)服务器。
安装
dotnet tool install --global SearchReplaceMcp安装后 sr 命令将在全球范围内可用。
要更新到最新版本:
dotnet tool update --global SearchReplaceMcp要卸载,请执行以下操作:
dotnet tool uninstall --global SearchReplaceMcp要在Claude Code中将其注册为MCP工具:
claude mcp add sr -- sr --mcp要在其他编辑器(如Cursor)中将其用作MCP工具,请将其添加到MCP配置中:
{
"mcpServers": {
"searchreplace": {
"command": "sr",
"args": ["--mcp"]
}
}
}用法
工作流程是:初始化会话、添加文档、搜索或阶段替换、预览,然后提交(或取消)。
sr init [path] # Initialize at path (default: current directory)
sr add
[path2] ... # Add files, directories, or glob patterns to scope
sr search
[options] # Search added documents for matches
sr replace
[options] # Search and stage replacements
sr preview # See all staged replacements with before/after
sr commit # Apply all staged replacements to files
sr cancel # Discard the session
sr help # Show help information搜索/替换选项
| 标志 | 描述 |
|---|---|
-c, --match-case | 区分大小写匹配 |
-w, --whole-word | 仅匹配整个单词 |
-r, --regex | 将模式视为正则表达式 |
-p, --preserve-case | 保留匹配文本的大小写模式(仅替换) |
--no-ecma | 与 --regex,使用。NET正则表达式代替ECMAScript。看 正则表达式风格 在......下面 |
例子
# Simple find and replace across C# files
sr init .
sr add "**/*.cs"
sr replace "oldMethod" "newMethod" -c -w
sr preview
sr commit
# Case-preserving rename (Hello→Goodbye, hello→goodbye, HELLO→GOODBYE)
sr init .
sr add "**/*.cs" "**/*.txt"
sr replace "hello" "goodbye" -p
sr preview
sr commit
# Regex replace with capture groups
sr init .
sr add "**/*.cs"
sr replace "Log\.Info\((.+)\)" "Logger.Information($1)" -r
sr preview
sr commit
# Search without replacing
sr init .
sr add "**/*.cs"
sr search "TODO" -c
sr cancel行为
更换在应用之前分阶段进行
在运行之前,不会将任何内容写入磁盘 sr commit.使用 sr preview 在申请之前查看所有更改。
多个替换呼叫安全累积
你可以打电话 sr replace 在提交之前,多次使用不同的模式。自动跳过重叠的替换以防止损坏。
检测到过期文件
如果文件在以下时间之间被外部修改 sr replace 和 sr commit,文件将被跳过并报告,而不是被静默损坏。
线路末端被保留
回写文件时,会检测并保留原始行尾样式(LF或CRLF)。
保留大小写以适应匹配的文本
随着 -p,替换文本反映了每场比赛的大小写模式:全部大写→ 上部,全部下部→ 下部,标题案例→ 标题大小写,混合→ 就这样。
正则表达式风格
当 --regex 默认情况下,模式被解释为ECMAScript正则表达式。这是大多数JS/Python用户所期望的,而且——关键的是——它允许对非参与组的反向引用与空字符串匹配。例如, (text-\w+)(?:\/(\d+))?-\2 匹配两者 text-red- 和 text-red/50-50 一次通过;下。NET的默认正则表达式,第一个输入将使整个匹配失败,因为组2没有参与。
通过 --no-ecma 回到。NET正则表达式。该模式支持向后看((?...)),平衡组和字符类减法,但失去了空的反向引用行为。
请注意,ECMAScript模式也会影响 \b 和那个 \w 字符类——两者都只将ASCII字母/数字/下划线视为单词字符。这很重要 --whole-word 结合 --regex 在非ASCII文本上:默认情况下,单词边界不会考虑以下字母 é 或 ñ 作为单词字符。使用 --no-ecma 如果你需要支持Unicode的单词边界。同样,ECMAScript模式下不区分大小写的匹配使用简单的大小写折叠,而不是。NET的文化意识折叠。
跳过二进制文件
添加文档时,会自动排除二进制文件(前8KB中的空字节检测到)。
路径被沙盒化
所有文件操作都与会话的基目录相关。
会话共享
CLI和MCP模式共享相同的会话存储,因此您可以在一种模式下初始化会话并在另一种模式中提交。
作为MCP服务器
sr --mcp当作为MCP服务器运行时,可以使用以下工具:
sr_init(path?: string)-初始化会话sr_add(paths: string)-将文档添加到作用域(逗号分隔的路径/globs)sr_search(pattern, matchCase, wholeWord, useRegex, ecmaScript=true)-搜索匹配项sr_replace(pattern, replacement, matchCase, wholeWord, useRegex, preserveCase, ecmaScript=true)-舞台更换sr_preview()-预览分阶段替换sr_commit()-应用分阶段替换sr_cancel()-取消会话sr_help()-获取帮助
发展
git clone
cd SearchReplaceMcp
dotnet build SearchReplaceMcp.sln
dotnet test SearchReplaceMcp.sln在开发过程中作为MCP服务器运行:
dotnet run --project SearchReplaceMcp.Cli/SearchReplaceMcp.Cli.csproj -- --mcp要打包:
dotnet pack SearchReplaceMcp.Cli/SearchReplaceMcp.Cli.csproj --configuration Release释放
发布由发布到NuGet Release 工作流,由推送触发 v* 标签。
- 碰撞 `
在SearchReplaceMcp.Cli/SearchReplaceMcp.Cli.csproj` 并承诺。 - 用匹配的版本标记提交,例如。
git tag v1.2.0. - 按下标签:
git push origin v1.2.0.
工作流验证标记是否与csproj版本匹配,构建、运行测试,并将包推送到NuGet。这 NUGET_API_KEY 必须配置存储库密钥。
许可证
MIT许可证
