Skip to main content
Glama

SharpLensMcp

NuGet npm License: MIT

一个模型上下文协议 (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 ./publish

Claude Code 设置

  1. 安装工具 (任选其一):

dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcp
  1. 在项目根目录创建 .mcp.json

{
  "mcpServers": {
    "sharplens": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "sharplens-mcp"],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}
  1. 重启 Claude Code 以加载 MCP 服务器

  2. 验证:让 Claude 对 Roslyn 服务器运行健康检查

为什么要将其与 Claude Code 一起使用?

Claude Code 原生支持用于基本导航(转到定义、查找引用)的 LSP。SharpLensMcp 增加了深度语义分析

功能

原生 LSP

SharpLensMcp

转到定义

查找引用

查找缺少 CancellationToken 的异步方法

影响分析(什么会中断?)

死代码检测

复杂度指标

带预览的安全重构

批量操作

配置

环境变量

描述

默认值

DOTNET_SOLUTION_PATH

启动时自动加载的 .sln.slnx 文件路径

无(必须调用 load_solution

SHARPLENS_ABSOLUTE_PATHS

使用绝对路径而非相对路径

false(相对路径可节省 token)

ROSLYN_LOG_LEVEL

日志详细程度:Trace, Debug, Information, Warning, Error

Information

ROSLYN_TIMEOUT_SECONDS

长时间运行操作的超时时间

30

ROSLYN_MAX_DIAGNOSTICS

返回的最大诊断信息数量

100

ROSLYN_ENABLE_SEMANTIC_CACHE

启用语义模型缓存

true(设置为 false 以禁用)

如果未设置 DOTNET_SOLUTION_PATH,则必须在使用其他工具之前调用 load_solution 工具。

AI 代理配置提示

AI 模型可能倾向于使用其原生工具(Grep、Read、LSP)而不是 MCP 服务器工具,即使 SharpLensMcp 提供了更好的功能。

为确保最佳工具使用效果:

  1. 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
  2. 其他 MCP 客户端:在代理的系统提示词中配置工具优先级

来自 Roslyn 的语义分析比基于文本的搜索更准确,特别是对于重载方法、部分类和继承层次结构。

代理职责:文档同步

重要: SharpLensMcp 会在内存中维护解决方案的表示以实现快速查询。当文件在外部被修改(通过 Edit/Write 工具)时,代理负责同步更改。

何时调用 sync_documents

操作

是否调用 sync_documents?

使用 Edit 工具修改 .cs 文件

✅ 是

使用 Write 工具创建新 .cs 文件

✅ 是

删除 .cs 文件

✅ 是

使用 SharpLensMcp 重构工具(重命名、提取等)

❌ 否(自动更新)

修改 .csproj 文件

❌ 否(请改用 load_solution

用法:

# 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 个工具)

工具

描述

get_symbol_info

位置处的语义信息

go_to_definition

跳转到符号定义

find_references

整个解决方案中的所有引用

find_implementations

接口/抽象实现

find_callers

影响分析 - 谁调用了此项?

get_type_hierarchy

继承链

search_symbols

Glob 模式搜索 (*Handler, Get*)

semantic_query

多重过滤搜索(异步、公共等)

get_type_members

按类型名称获取所有成员

get_type_members_batch

一次调用获取多个类型

get_method_signature

按名称获取详细签名

get_derived_types

查找所有子类

get_base_types

完整继承链

get_attributes

列出符号上的特性

get_containing_member

位置处的包含符号

get_method_overloads

方法的所有重载

find_attribute_usages

按特性查找类型/成员

分析 (11 个工具)

工具

描述

get_diagnostics

编译器错误/警告

analyze_data_flow

变量赋值和使用

analyze_control_flow

分支/可达性

analyze_change_impact

如果更改,什么会中断?

check_type_compatibility

A 可以赋值给 B 吗?

get_outgoing_calls

此方法调用了什么?

find_unused_code

死代码检测

validate_code

不写入的编译检查

get_complexity_metrics

圈复杂度、嵌套、LOC、认知复杂度

find_circular_dependencies

项目和命名空间循环检测

get_missing_members

未实现的接口/抽象成员

重构 (14 个工具)

工具

描述

rename_symbol

整个解决方案的安全重命名

change_signature

添加/删除/重新排序参数

extract_method

使用数据流分析提取方法

extract_interface

从类生成接口

generate_constructor

从字段/属性生成

organize_usings

排序并删除未使用的 using

organize_usings_batch

批量整理多个文件

format_document_batch

批量格式化项目中的文件

get_code_actions_at_position

位置处的所有 Roslyn 重构

apply_code_action_by_title

按标题应用任何重构

implement_missing_members

生成接口存根

encapsulate_field

字段转属性

inline_variable

内联临时变量

extract_variable

将表达式提取为变量

代码生成 (2 个工具)

工具

描述

add_null_checks

生成 ArgumentNullException 防御

generate_equality_members

Equals/GetHashCode/运算符

复合工具 (6 个工具)

工具

描述

get_type_overview

一次调用获取完整类型信息

analyze_method

签名 + 调用者 + 外发调用 + 位置

get_file_overview

带有诊断信息的文件摘要

get_method_source

按名称获取源代码

get_method_source_batch

一次调用获取多个方法源码

get_instantiation_options

如何创建类型

发现 (2 个工具)

工具

描述

get_di_registrations

扫描 DI 服务注册

find_reflection_usage

检测反射/动态使用

基础设施 (10 个工具)

工具

描述

health_check

服务器状态

load_solution

加载 .sln/.slnx 以进行分析

sync_documents

将文件更改同步到已加载的解决方案中

get_project_structure

解决方案结构

dependency_graph

项目依赖关系

get_code_fixes

诊断信息的可用修复

apply_code_fix

应用特定的代码修复

get_nuget_dependencies

每个项目的 NuGet 包列表

get_source_generators

列出活动的源生成器

get_generated_code

查看生成的源代码

其他 MCP 客户端

对于 Claude Code 以外的 MCP 客户端,请添加到您的配置中:

{
  "mcpServers": {
    "sharplens": {
      "command": "sharplens",
      "args": [],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}

用法

  1. 加载解决方案:调用 roslyn:load_solution 并传入 .sln.slnx 文件路径(或设置 DOTNET_SOLUTION_PATH

  2. 分析代码:使用 57 个工具中的任何一个进行导航、分析、重构

  3. 安全重构:使用 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 代理

开发

添加新工具

  1. 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" }
    );
}
  1. src/McpServer.csHandleListToolsAsync 中添加工具定义

  2. src/McpServer.csHandleToolCallAsync switch 中添加路由

  3. 构建并发布

dotnet build -c Release
dotnet publish -c Release -o ./publish

关键文件

文件

用途

src/RoslynService.cs

工具实现 (57 个方法)

src/McpServer.cs

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