sharplens-mcp
SharpLensMcp
一个模型上下文协议 (MCP) 服务器,为 .NET/C# 提供 62 个 AI 优化工具,利用 Microsoft Roslyn 进行语义代码分析、导航、重构和代码生成。
专为 AI 编码代理构建 - 提供 AI 仅通过阅读源文件无法推断出的编译器级精确代码理解。
安装
通过 NuGet (推荐)
dotnet tool install -g SharpLensMcp然后运行:
sharplens通过 npm
npx -y sharplens-mcp从源码构建
dotnet build -c Release
dotnet publish -c Release -o ./publishClaude Code 设置
安装工具 (任选其一):
dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcp在项目根目录创建
.mcp.json:
{
"mcpServers": {
"sharplens": {
"type": "stdio",
"command": "npx",
"args": ["-y", "sharplens-mcp"],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}重启 Claude Code 以加载 MCP 服务器
验证:让 Claude 对 Roslyn 服务器运行健康检查
为什么要将其与 Claude Code 一起使用?
Claude Code 原生支持用于基本导航(转到定义、查找引用)的 LSP。SharpLensMcp 增加了深度语义分析:
功能 | 原生 LSP | SharpLensMcp |
转到定义 | ✅ | ✅ |
查找引用 | ✅ | ✅ |
查找缺少 | ❌ | ✅ |
影响分析(什么会中断?) | ❌ | ✅ |
死代码检测 | ❌ | ✅ |
复杂度指标 | ❌ | ✅ |
带预览的安全重构 | ❌ | ✅ |
批量操作 | ❌ | ✅ |
配置
环境变量 | 描述 | 默认值 |
| 启动时自动加载的 | 无(必须调用 |
| 使用绝对路径而非相对路径 |
|
| 日志详细程度: |
|
| 长时间运行操作的超时时间 |
|
| 返回的最大诊断信息数量 |
|
| 启用语义模型缓存 |
|
如果未设置 DOTNET_SOLUTION_PATH,则必须在使用其他工具之前调用 load_solution 工具。
AI 代理配置提示
AI 模型可能倾向于使用其原生工具(Grep、Read、LSP)而不是 MCP 服务器工具,即使 SharpLensMcp 提供了更好的功能。
为确保最佳工具使用效果:
Claude Code:添加到项目的
CLAUDE.md中:For C# code analysis, prefer SharpLensMcp tools over native tools: - Use `roslyn:search_symbols` instead of Grep for finding symbols - Use `roslyn:get_method_source` instead of Read for viewing methods - Use `roslyn:find_references` for semantic (not text) references其他 MCP 客户端:在代理的系统提示词中配置工具优先级
来自 Roslyn 的语义分析比基于文本的搜索更准确,特别是对于重载方法、部分类和继承层次结构。
代理职责:文档同步
重要: SharpLensMcp 会在内存中维护解决方案的表示以实现快速查询。当文件在外部被修改(通过 Edit/Write 工具)时,代理负责同步更改。
何时调用 sync_documents:
操作 | 是否调用 sync_documents? |
使用 Edit 工具修改 .cs 文件 | ✅ 是 |
使用 Write 工具创建新 .cs 文件 | ✅ 是 |
删除 .cs 文件 | ✅ 是 |
使用 SharpLensMcp 重构工具(重命名、提取等) | ❌ 否(自动更新) |
修改 .csproj 文件 | ❌ 否(请改用 |
用法:
# After editing specific files
sync_documents(filePaths: ["src/MyClass.cs", "src/MyService.cs"])
# After bulk changes - sync all documents
sync_documents()为什么这样设计?
这反映了 LSP(语言服务器协议)的工作方式——客户端(编辑器)通知服务器更改。这种方法:
消除了竞态条件(代理控制时机)
避免了文件监视器的复杂性和平台差异
比完全重新加载解决方案更快
让代理能够显式控制工作区状态
如果不同步: 查询可能会返回过时的数据(旧的方法签名、缺少新文件等)。
功能
62 个语义分析工具 - 导航、重构、代码生成、诊断、发现
AI 优化描述 - 清晰的 USAGE/OUTPUT/WORKFLOW 模式
结构化响应 - 一致的
success/error/data格式,包含suggestedNextTools从零开始的坐标 - 清晰的警告以防止差一错误
预览模式 - 应用前进行安全重构预览
批量操作 - 一次调用中进行多次查找以减少上下文使用
工具类别
导航与发现 (17 个工具)
工具 | 描述 |
| 位置处的语义信息 |
| 跳转到符号定义 |
| 整个解决方案中的所有引用 |
| 接口/抽象实现 |
| 影响分析 - 谁调用了此项? |
| 继承链 |
| Glob 模式搜索 ( |
| 多重过滤搜索(异步、公共等) |
| 按类型名称获取所有成员 |
| 一次调用获取多个类型 |
| 按名称获取详细签名 |
| 查找所有子类 |
| 完整继承链 |
| 列出符号上的特性 |
| 位置处的包含符号 |
| 方法的所有重载 |
| 按特性查找类型/成员 |
分析 (11 个工具)
工具 | 描述 |
| 编译器错误/警告 |
| 变量赋值和使用 |
| 分支/可达性 |
| 如果更改,什么会中断? |
| A 可以赋值给 B 吗? |
| 此方法调用了什么? |
| 死代码检测 |
| 不写入的编译检查 |
| 圈复杂度、嵌套、LOC、认知复杂度 |
| 项目和命名空间循环检测 |
| 未实现的接口/抽象成员 |
重构 (14 个工具)
工具 | 描述 |
| 整个解决方案的安全重命名 |
| 添加/删除/重新排序参数 |
| 使用数据流分析提取方法 |
| 从类生成接口 |
| 从字段/属性生成 |
| 排序并删除未使用的 using |
| 批量整理多个文件 |
| 批量格式化项目中的文件 |
| 位置处的所有 Roslyn 重构 |
| 按标题应用任何重构 |
| 生成接口存根 |
| 字段转属性 |
| 内联临时变量 |
| 将表达式提取为变量 |
代码生成 (2 个工具)
工具 | 描述 |
| 生成 ArgumentNullException 防御 |
| Equals/GetHashCode/运算符 |
复合工具 (6 个工具)
工具 | 描述 |
| 一次调用获取完整类型信息 |
| 签名 + 调用者 + 外发调用 + 位置 |
| 带有诊断信息的文件摘要 |
| 按名称获取源代码 |
| 一次调用获取多个方法源码 |
| 如何创建类型 |
发现 (2 个工具)
工具 | 描述 |
| 扫描 DI 服务注册 |
| 检测反射/动态使用 |
基础设施 (10 个工具)
工具 | 描述 |
| 服务器状态 |
| 加载 .sln/.slnx 以进行分析 |
| 将文件更改同步到已加载的解决方案中 |
| 解决方案结构 |
| 项目依赖关系 |
| 诊断信息的可用修复 |
| 应用特定的代码修复 |
| 每个项目的 NuGet 包列表 |
| 列出活动的源生成器 |
| 查看生成的源代码 |
其他 MCP 客户端
对于 Claude Code 以外的 MCP 客户端,请添加到您的配置中:
{
"mcpServers": {
"sharplens": {
"command": "sharplens",
"args": [],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}用法
加载解决方案:调用
roslyn:load_solution并传入.sln或.slnx文件路径(或设置DOTNET_SOLUTION_PATH)分析代码:使用 57 个工具中的任何一个进行导航、分析、重构
安全重构:使用
preview: true在应用前预览更改
架构
MCP Client (AI Agent)
| stdin/stdout (JSON-RPC 2.0)
v
SharpLensMcp
- Protocol handling
- 57 AI-optimized tools
|
v
Microsoft.CodeAnalysis (Roslyn)
- MSBuildWorkspace
- SemanticModel
- SymbolFinder要求
.NET 8.0 SDK 或更高版本 — 适用于 .NET 8、9、10 及未来版本。分析任何 .NET 8+ 项目/解决方案。
支持 MCP 的 AI 代理
开发
添加新工具
在
src/RoslynService.cs中添加方法:
public async Task<object> YourToolAsync(string param1, int? param2 = null)
{
EnsureSolutionLoaded();
// Your logic...
return CreateSuccessResponse(
data: new { /* results */ },
suggestedNextTools: new[] { "next_tool_hint" }
);
}在
src/McpServer.cs的HandleListToolsAsync中添加工具定义在
src/McpServer.cs的HandleToolCallAsyncswitch 中添加路由构建并发布:
dotnet build -c Release
dotnet publish -c Release -o ./publish关键文件
文件 | 用途 |
| 工具实现 (57 个方法) |
| MCP 协议、工具定义、路由 |
许可证
MIT - 详情请参阅 LICENSE。
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pzalutski-pixel/sharplens-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server