MarcelRoozekrans/roslyn-codelens-mcp

MarcelRoozekrans/roslyn-codelens-mcp

#๏ธโƒฃ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - Roslyn-based MCP server with 22 semantic code intelligence tools for .NET. Type hierarchies, call graphs, DI registrations, diagnostics, code fixes, complexity metrics, and more. Sub-millisecond lookups via pre-built indexes.

CLAUDE.md

Roslyn CodeLens MCP

This is a Roslyn-based MCP server that provides semantic code intelligence for .NET codebases.

MCP Server

The .mcp.json configures the roslyn-codelens MCP server to analyze this solution. It runs via dotnet run and connects over stdio.

Skill

The plugins/roslyn-codelens/skills/roslyn-codelens/SKILL.md skill teaches Claude when and how to use the 22 code intelligence tools. Use the MCP tools instead of Grep/Glob for any .NET semantic queries (finding implementations, callers, references, diagnostics, etc.).

Project Structure

  • src/RoslynCodeLens/ โ€” MCP server (entry point: Program.cs)
  • tests/RoslynCodeLens.Tests/ โ€” Unit tests (xUnit)
  • benchmarks/RoslynCodeLens.Benchmarks/ โ€” BenchmarkDotNet performance tests
  • plugins/roslyn-codelens/ โ€” Claude Code skill definition

Development

  • Build: dotnet build
  • Test: dotnet test
  • Benchmarks: dotnet run --project benchmarks/RoslynCodeLens.Benchmarks -c Release
README.md

Roslyn CodeLens MCP Server

NuGet NuGet Downloads Build Status License

A Roslyn-based MCP server that gives AI agents deep semantic understanding of .NET codebases โ€” type hierarchies, call graphs, DI registrations, diagnostics, refactoring, and more.


Hosted deployment

A hosted deployment is available on Fronteir AI.

Features

  • find_implementations โ€” Find all classes/structs implementing an interface or extending a class
  • find_callers โ€” Find every call site for a method, property, or constructor
  • get_type_hierarchy โ€” Walk base classes, interfaces, and derived types
  • get_di_registrations โ€” Scan for DI service registrations
  • get_project_dependencies โ€” Get the project reference graph
  • get_symbol_context โ€” One-shot context dump for any type
  • find_reflection_usage โ€” Detect dynamic/reflection-based usage
  • find_references โ€” Find all references to any symbol (types, methods, properties, fields, events)
  • go_to_definition โ€” Find the source file and line where a symbol is defined
  • get_diagnostics โ€” List compiler errors, warnings, and Roslyn analyzer diagnostics
  • get_code_fixes โ€” Get available code fixes with structured text edits for any diagnostic
  • search_symbols โ€” Fuzzy workspace symbol search by name
  • get_nuget_dependencies โ€” List NuGet package references per project
  • find_attribute_usages โ€” Find types and members decorated with a specific attribute
  • find_circular_dependencies โ€” Detect cycles in project or namespace dependency graphs
  • get_complexity_metrics โ€” Cyclomatic complexity analysis per method
  • find_naming_violations โ€” Check .NET naming convention compliance
  • find_large_classes โ€” Find oversized types by member or line count
  • find_unused_symbols โ€” Dead code detection via reference analysis
  • get_source_generators โ€” List source generators and their output per project
  • get_generated_code โ€” Inspect generated source code from source generators
  • get_code_actions โ€” Discover available refactorings and fixes at any position (extract method, rename, inline variable, and more)
  • apply_code_action โ€” Execute any Roslyn refactoring by title, with preview mode (returns a diff before writing to disk)
  • list_solutions โ€” List all loaded solutions and which one is currently active
  • set_active_solution โ€” Switch the active solution by partial name (all subsequent tools operate on it)
  • rebuild_solution โ€” Force a full reload of the analyzed solution
  • analyze_data_flow โ€” Variable read/write/capture analysis within a statement range (declared, read, written, always assigned, captured, flows in/out)
  • analyze_control_flow โ€” Branch/loop reachability analysis within a statement range (start/end reachability, return statements, exit points)
  • analyze_change_impact โ€” Show all files, projects, and call sites affected by changing a symbol โ€” combines find_references and find_callers
  • get_type_overview โ€” Compound tool: type context + hierarchy + file diagnostics in one call
  • analyze_method โ€” Compound tool: method signature + callers + outgoing calls in one call
  • get_file_overview โ€” Compound tool: types defined in a file + file-scoped diagnostics in one call

Quick Start

VS Code / Visual Studio (via dnx)

Add to your MCP settings (.vscode/mcp.json or VS settings):

{
  "servers": {
    "roslyn-codelens": {
      "type": "stdio",
      "command": "dnx",
      "args": ["RoslynCodeLens.Mcp", "--yes"]
    }
  }
}

Claude Code Plugin

claude install gh:MarcelRoozekrans/roslyn-codelens-mcp

.NET Global Tool

dotnet tool install -g RoslynCodeLens.Mcp

Then add to your MCP client config:

{
  "mcpServers": {
    "roslyn-codelens": {
      "command": "roslyn-codelens-mcp",
      "args": [],
      "transport": "stdio"
    }
  }
}

Usage

The server automatically discovers .sln files by walking up from the current directory. You can also pass one or more solution paths directly:

# Single solution
roslyn-codelens-mcp /path/to/MySolution.sln

# Multiple solutions โ€” switch between them with set_active_solution
roslyn-codelens-mcp /path/to/A.sln /path/to/B.sln

When multiple solutions are loaded, use list_solutions to see what's available and set_active_solution("B") to switch context. The first path is active by default.

Performance

All type lookups use pre-built reverse inheritance maps, member indexes, and attribute indexes for O(1) access. Benchmarked on an i9-12900HK with .NET 10.0.4:

Tool Latency Memory
find_circular_dependencies 892 ns 1.2 KB
get_project_dependencies 987 ns 1.3 KB
go_to_definition 1.3 ยตs 608 B
get_type_hierarchy 1.8 ยตs 856 B
find_implementations 2.0 ยตs 704 B
get_symbol_context 3.0 ยตs 960 B
get_source_generators 4.9 ยตs 7.1 KB
analyze_data_flow 7.4 ยตs 880 B
find_attribute_usages 20 ยตs 312 B
get_generated_code 30 ยตs 7.8 KB
analyze_control_flow 96 ยตs 13 KB
get_diagnostics 98 ยตs 22 KB
get_complexity_metrics 127 ยตs 5.6 KB
get_type_overview 138 ยตs 24 KB
find_large_classes 148 ยตs 888 B
get_file_overview 162 ยตs 24 KB
get_di_registrations 172 ยตs 13 KB
get_nuget_dependencies 202 ยตs 15 KB
find_reflection_usage 235 ยตs 15 KB
find_callers 406 ยตs 37 KB
analyze_method 619 ยตs 38 KB
get_code_actions 765 ยตs 49 KB
search_symbols 1.3 ms 2.5 KB
find_unused_symbols 3.8 ms 207 KB
find_references 3.9 ms 204 KB
analyze_change_impact 4.2 ms 243 KB
find_naming_violations 10.7 ms 654 KB
Solution loading (one-time) ~3.0 s 8.2 MB

Hot Reload

The server watches .cs, .csproj, .props, and .targets files for changes. When a change is detected, affected projects are lazily re-compiled on the next tool query โ€” only stale projects and their downstream dependents are re-compiled, not the full solution.

Location-returning tools include an IsGenerated flag to distinguish source-generator output from hand-written code.

Requirements

  • .NET 10 SDK
  • A .NET solution with compilable projects

Development

dotnet build
dotnet test
dotnet run --project benchmarks/RoslynCodeLens.Benchmarks -c Release

License

MIT