Roslyn CodeLens MCP Server

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:
roslyn-codelens-mcp /path/to/MySolution.sln
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