关于 resharper-cli-mcp
resharper-cli-mcp 将 JetBrains ReSharper 命令行工具封装为 MCP 服务,供编码 Agent 检查和清理 .NET 解决方案。它遵循解决方案的 .DotSettings 与 .editorconfig,并通过缓存、结果整理和运行排队处理分析流程;这是非官方项目。
主要功能
- 01按文件和严重级别检查问题
- 02按 ReSharper 配置清理代码
- 03将检查结果按文件分组
- 04预热并复用 ReSharper 缓存
- 05排队运行并报告进度
适用场景
- 01检查 .NET 解决方案中的代码问题
- 02按项目样式设置清理指定文件
- 03筛选需要处理的问题严重级别
- 04让 Agent 查询检查与配置指南
MCP 相关
作为 MCP 服务,它向编码 Agent 提供 `resharper_inspect`、`resharper_cleanup` 和缓存重置工具,并提供设置与配置指南资源。它调用本机安装的 `jb` 工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
resharper-cli-mcp
resharper-cli-mcp 是一个 MCP 服务,可为编码 Agent 运行 JetBrains 的 ReSharper 命令行工具。它的 resharper_inspect 工具会运行 jb inspectcode 并返回问题,而 resharper_cleanup 则会对 Agent 指定的文件运行 jb cleanupcode。jb 会像 ReSharper 在 IDE 中那样读取解决方案的 .DotSettings 和 .editorconfig,因此 Agent 遵循的严重级别和代码风格与 IDE 中相同。此服务为非官方项目,与 JetBrains 无关联,也未得到 JetBrains 的认可;它运行的是你自行安装的 jb。
为什么不直接调用 jb?
Agent 可以在 shell 中运行 jb。但这样会得到一个可能列出数千个问题的报告文件,每次调用都必须指定清理配置文件,而且每次新检出时缓存都是冷的。此服务会处理这些问题:
- 问题会以按文件分组的 Markdown 格式返回,并逐步降低细节程度重新渲染,直到内容符合客户端的输出预算。
- 除非指定了
--profile,否则jb cleanupcode会运行Built-in: Full Cleanup,不管解决方案设置如何。此服务会传入解决方案在SilentCleanupProfile下指定的配置文件,并报告清理修改了哪些文件。 - 客户端连接时会预热缓存,除非设置
RESHARPER_MCP_PREWARM=off。新工作树或克隆会从另一个检出目录的热缓存中获取缓存数据。 - 运行会排队处理,因为否则同一解决方案上并发运行第二个
jb时,会自行构建一份冷缓存。 - 运行期间每十秒报告一次进度,并显示已用时间和上限。
运行时间
每次运行都会分析整个解决方案,因为解析符号需要完整的解决方案模型。对于检查操作,files 会缩小报告范围,而不会缩小分析范围。对于清理操作,files 还会决定重写多少文件;在缓存已预热的情况下,指定的文件越多,清理耗时越长。首次针对某个解决方案运行时会构建 ReSharper 缓存,通常需要几分钟;之后使用同一缓存的运行速度会快数倍。
每次运行的时长上限由 RESHARPER_MCP_TIMEOUT_SECS 控制,默认为 10 分钟。如果客户端自身的工具调用超时短于冷启动运行所需时间,也请调高该值。
快速开始
该服务需要 .NET 10 SDK 和 JetBrains 的 ReSharper 命令行工具,它们免费且无需 ReSharper 许可证。两者都以 .NET 全局工具的形式安装:
dotnet tool install -g JetBrains.ReSharper.GlobalTools
dotnet tool install -g Zphil.ReSharperCli
向 MCP 客户端注册命令 resharper-cli-mcp,该命令不接受任何参数。对于 Claude Code,将其添加到 .mcp.json:
{
"mcpServers": {
"resharper": {
"command": "resharper-cli-mcp"
}
}
}
该服务使用其工作目录中的唯一一个 .sln 或 .slnx。如果没有或有多个文件,请在配置的 env 块中设置 JB_SOLUTION_PATH。
其他客户端的区别仅在于条目放置位置及其外层键:
| 客户端 | 条目放置位置 | 顶层键 |
|---|---|---|
| Visual Studio 2022 17.14+ 和 2026 | 解决方案旁的 .mcp.json | servers,并带有 "type": "stdio" |
| VS Code | .vscode/mcp.json | servers,并带有 "type": "stdio" |
| Cursor | .cursor/mcp.json,或供所有项目使用的 ~/.cursor/mcp.json | mcpServers |
| Rider AI Assistant | Settings | Tools | AI Assistant | MCP | mcpServers |
| Junie | .junie/mcp/mcp.json,或供所有项目使用的 ~/.junie/mcp/mcp.json | mcpServers |
| Cline | cline_mcp_settings.json,位于 Configure MCP Servers 下 | mcpServers |
在 Rider 中,IDE 自身的分析已向其 Agent 提供检查结果,而 resharper_inspect 会在此基础上再对解决方案运行一次分析。因此,该服务在 Rider 中的唯一用途是 resharper_cleanup,因为 Rider 的 MCP 工具可以重新格式化文件,但无法运行清理配置文件。
对于 Codex CLI,请运行 codex mcp add resharper -- resharper-cli-mcp。llms-install.md 包含每个客户端的完整条目,可用作核对清单,因此你可以让 Agent 参考它完成安装。
安装这两个工具后,只需单击一次,即可在 VS Code、Visual Studio、Cursor 和 LM Studio 中添加该服务:
安装为 Claude Code 插件
此仓库也是一个 Claude Code 插件市场,其中包含一个插件:
/plugin marketplace add andypgray/resharper-cli-mcp
/plugin install resharper-cli-mcp@resharper-cli-mcp
该插件通过 dotnet dnx 启动服务,并固定到某个版本;运行 claude plugin update resharper-cli-mcp@resharper-cli-mcp 可将固定版本更新到最新版。你仍需安装 .NET 10 SDK 和 jb,而 ReSharper 的缓存位于插件的数据目录中。
安装为 Claude Desktop 扩展
从最新版本下载 resharper-cli-mcp-<version>.mcpb,双击该文件,并将解决方案文件设置为要分析的 .sln 或 .slnx。Claude Desktop 会在仓库外启动该服务,因此服务没有可用于查找解决方案的工作目录。该安装包仅包含服务,因此请先安装 .NET 10 运行时和 ReSharper 命令行工具。Run cap 用于延长单次运行的 10 分钟时限。
工具
| 工具 | 是否修改文件 | 功能说明 |
|---|---|---|
resharper_inspect | 否 | 运行 jb inspectcode,并按文件分组返回问题。 |
resharper_cleanup | 是 | 对指定文件运行 jb cleanupcode,并报告哪些文件在磁盘上发生了更改。 |
resharper_reset_cache | 否(会删除缓存) | 清除解决方案的 ReSharper 缓存,让下次运行从冷启动开始;也可回收已删除的检出目录遗留的缓存。 |
resharper_inspect 接受 files glob(相对于解决方案或绝对路径),以及 severity,其值可以是 Suggestion、Warning(默认值)或 Error。当 severity=Suggestion 时,响应如下:
Found 2 issue(s) across 1 file(s):
### /repo/src/HomeController.cs
- **Line 8** [WARNING] `RedundantUsingDirective`: Using directive is not required by the code and can be safely removed.
- **Line 24** [SUGGESTION] `FieldCanBeMadeReadOnly.Local`: Field can be made readonly.
report=Markdown 会将每个问题及其消息写入系统临时目录下的文件中。响应会给出文件名,服务会在七天后删除该文件。detail 限制响应的详细程度,最低可设为单行的 Minimal,因此一次调用 detail=Minimal report=Markdown 就能检查一个旧版解决方案。
resharper_cleanup 只更改风格,不改变行为:格式、using 指令、var 风格、修饰符顺序、多余的限定符和括号,以及花括号。如果没有提供 profile 参数,它会使用解决方案设置中 SilentCleanupProfile 指定的配置文件,然后使用 Built-in: Full Cleanup。如果 Full Cleanup 会导致旧版代码发生大量变更,请在该处指定一个范围更窄的配置文件。此后每次调用都会使用该配置文件,包括来自不知道它存在的 Agent 的调用。
对于尚无风格设置的代码库,请从 ReSharper 的检测代码风格设置开始,或在 Rider 中使用自动检测代码风格规则。derive_style_guide 提示词可引导 Agent 完成相同的工作,无需 IDE。
配置
在客户端配置的 env 块中设置这些变量。它们都是可选的。JB_ 变量会传递给 jb,而 RESHARPER_MCP_ 变量用于控制服务本身。
| 变量 | 默认值 | 用途 |
|---|---|---|
JB_SOLUTION_PATH | 自动发现 | 当工作目录中没有解决方案或存在多个解决方案时要使用的解决方案;solutionPath 工具参数可覆盖此值,仅对单次调用生效。 |
JB_SETTINGS_PATH | 无 | 位于解决方案自身设置文件之外的 .DotSettings 文件,作为 Custom 层挂载在解决方案及其所有项目设置之上。 |
JB_CACHE_HOME | ~/.jb-cache | ReSharper 缓存目录。 |
JB_EXTENSIONS | 无 | 要加载的 ReSharper 插件 ID,以分号分隔。 |
JB_EXTENSION_SOURCE | jb 自带 | 这些插件的自定义 NuGet 源。 |
RESHARPER_MCP_TIMEOUT_SECS | 600 | 单次 jb 运行的超时上限,以及等待单个正在执行任务的超时上限,范围限制为 60–86,400 秒。 |
RESHARPER_MCP_PREWARM | 开启 | 设为 off 可在客户端连接时禁用缓存预热。 |
RESHARPER_MCP_LOG_LEVEL | Warning | 滚动文件日志的级别:Verbose、Debug、Information、Warning、Error 或 Fatal。Microsoft 使用的名称 Trace 和 Critical 也有效;任何无法识别的值都会回退到 Warning。 |
MAX_MCP_OUTPUT_TOKENS | 25,000 个字符 | 客户端输出预算;响应会按每个 token 2.5 个字符的比例缩减,以符合预算。 |
解决方案依次取自 solutionPath 参数、JB_SOLUTION_PATH,然后是工作目录中的唯一一个 .sln 或 .slnx 文件;不会向上遍历到父目录。Windows 上的日志按天滚动,存放于 %LOCALAPPDATA%\Zphil.ReSharperCli\logs;其他平台则存放在对应位置。
两份指南提供了更深入的说明,服务也会将它们作为 MCP 资源提供,供 Agent 阅读。设置指南(resharper://guides/setup)介绍发现机制、缓存、运行时间和输出限制。配置指南(resharper://guides/configuration)介绍设置层、清理配置文件,以及如何避免有意设置的代码风格被还原。
清理提醒钩子
Agent 很容易忘记在任务结束时进行唯一一次清理。此 Claude Code PostToolUse 钩子会在每次编辑 .cs 或 .razor 文件后,向 Agent 的上下文添加一行提醒。它不会编辑代码或调用工具,因此仍由 Agent 决定何时进行清理。将它添加到 .claude/settings.json;该命令需要 POSIX shell,在 Windows 上可使用 Git Bash:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "grep -qiE '\"file_path\"[[:space:]]*:[[:space:]]*\"[^\"]*\\.(cs|razor)\"' && printf '%s' '{\"hookSpecificOutput\":{\"hookEventName\":\"PostToolUse\",\"additionalContext\":\"When this task is done, batch every edited .cs/.razor file into one resharper_cleanup call.\"}}' || true"
}
]
}
]
}
}
隐私政策
resharper-cli-mcp 不会收集任何信息。它没有遥测、分析、账号或远程日志记录,也不会自行发起网络调用。每次工具调用都会在你的计算机上运行 jb,结果则通过 stdio 返回给启动该服务的 MCP 客户端。
服务写入的所有内容都会保留在该计算机上:诊断日志、调用所请求的检查报告,以及 ReSharper 缓存旁边的记录文件。日志和报告可能包含绝对路径,以及从解决方案中读取的规则 ID 和消息。PRIVACY.md 是完整政策,其中说明了每个文件的存放位置及保留时长。
贡献
欢迎贡献。在公开解决方案上可复现的错误报告、MCP 客户端兼容性修复,以及对发现机制或输出格式的改进,都特别有帮助。CONTRIBUTING.md 介绍了开发环境设置和测试架构;SECURITY.md 介绍了如何私下报告安全问题。
许可
MIT;请参阅 LICENSE。
JetBrains 和 ReSharper 是 JetBrains s.r.o. 的商标。本项目是对其 ReSharper Command Line Tools 的独立封装,该工具集遵循 JetBrains 自有许可发布。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。