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
- find_event_subscribers — Every += / -= site for an event symbol, with resolved handler and subscribe/unsubscribe tag
- find_tests_for_symbol — List xUnit/NUnit/MSTest methods that exercise a production symbol; opt-in transitive walk through helpers
- get_test_summary — Per-project inventory of test methods with framework, attribute kind, data-row count, location, and production symbols referenced
- find_uncovered_symbols — Public methods and properties no test transitively reaches; sorted by cyclomatic complexity for prioritization
- generate_test_skeleton — Emit a compilable test-class skeleton (as text) for a method or type. Auto-detects xUnit/NUnit/MSTest; surfaces constructor dependencies as TodoNotes; returns a suggested file path. Closes the loop with
find_uncovered_symbols - get_type_hierarchy — Walk base classes, interfaces, and derived types
- get_di_registrations — Scan for DI service registrations. Reads generic (
AddSingleton<IFoo, Foo>()), single-generic,typeofpair and factory-lambda forms - get_instantiation_options — "How do I construct this type?" in one call: constructors with full parameter detail, static factory methods declared anywhere in the solution (including on a separate factory type), DI registrations, and
requiredmembers. PassfromProjectto learn whether that project can actually reach each option — it honoursInternalsVisibleTo, so it answers "can my test project call this internal constructor?" - get_project_dependencies — Get the project reference graph
- get_symbol_context — One-shot context dump for any type
- get_public_api_surface — Enumerate every public/protected type and member in production projects; flat, deterministically-sorted list suitable for API review or breaking-change baselines.
- find_breaking_changes — Diff the current API against a baseline JSON or DLL; report removed members, kind changes, and accessibility changes with Breaking/NonBreaking severity.
- find_reflection_usage — Detect dynamic/reflection-based usage
- get_exception_flow — What exceptions can escape a method: walks callees depth-bounded, propagates each throw up through every enclosing try/catch, and reports what still escapes with its propagation path; metadata callees contribute their documented exceptions
- find_throw_sites — Every place an exception type is thrown, optionally including derived types; rethrows flagged
- find_catch_blocks — Every catch for a type, optionally via base clauses; flags filtered, rethrowing, and empty (swallowing) handlers
- find_references — Find all references to any symbol (types, methods, properties, fields, events), each tagged with a kind (
read,write,readwrite,invocation,method_group,object_creation,cast,type_check,typeof,base_type,type_constraint,type_argument,declaration,attribute,nameof,xml_doc) and reported per occurrence with a column; filter server-side withkinds(e.g.["write","readwrite"]for mutation sites) - go_to_definition — Find the source file and line where a symbol is defined
- get_method_source — Full declaration source (XML docs, attributes, signature, body — original formatting) for one or many members by name in a single call: methods (all overloads), constructors, properties, indexers, fields, events; per-item statuses (
ok/notFound/ambiguous/metadata/unsupportedKind) so a batch never fails wholesale - resolve_stack_trace — Map a pasted .NET stack trace to file/line/symbol, undoing compiler name mangling (async/iterator state machines, lambdas, local functions, generic arity); handles inner-exception chains, log-prefixed lines, and Demystifier traces
- 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_obsolete_usage — Every
[Obsolete]call site grouped by deprecation message and severity, errors first; for planning migrations - find_circular_dependencies — Detect cycles in project or namespace dependency graphs
- check_architecture — Enforce layering rules you supply (
forbidandallowOnly) against the real semantic type graph rather thanusingdirectives; violations are grouped per boundary with a reference count and example sites - get_complexity_metrics — Cyclomatic complexity, cognitive complexity and max nesting depth per member (methods, constructors, properties, indexers, operators). Cyclomatic counts paths and starts at 1; cognitive measures how hard the code is to follow and starts at 0.
metricpicks which one the threshold and sort use — cognitive is the better refactoring-priority signal, cyclomatic the better test-budget one - find_naming_violations — Check .NET naming convention compliance
- find_async_violations — Sync-over-async,
async voidmisuse, missing awaits, fire-and-forget tasks; per-violation report with severity - find_disposable_misuse —
IDisposable/IAsyncDisposableinstances not wrapped inusing/await using/returned/assigned to field; severity error/warning per violation. - find_large_classes — Find oversized types by member or line count
- find_god_objects — Types combining high size with high cross-namespace coupling; sharper signal than raw size for SRP violations
- find_unused_symbols — Dead code detection via reference analysis. Auto-filters test methods (xUnit/NUnit/MSTest), MCP tool entry points, source-generator output, MEF-composed services, and interop-laid-out fields; filter counts surface in
summary.filteredOut - get_project_health — Composite audit aggregating 7 quality dimensions per project (complexity, large classes, naming, unused symbols, reflection, async violations, disposable misuse) with counts and top-N hotspots inline
- get_source_generators — List source generators and their output per project
- get_generated_code — Inspect generated source code from source generators
- inspect_external_assembly — Browse types, members, and XML docs from closed-source NuGet packages and referenced assemblies
- peek_il — Decompile any method to ilasm-style IL bytecode from closed-source or generated assemblies
- 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)
- rename_symbol — Solution-wide safe rename of a type or member via Roslyn's Renamer, with preview mode, conflict reporting, and a freshness check against on-disk edits
- change_signature — Add, remove, and reorder a method's parameters and rewrite every call site; handles named/optional arguments,
paramsand extension methods, and reports the overrides and interface implementations it cascaded to - 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)
- load_solution — Load an additional .sln/.slnx at runtime and make it the active solution
- unload_solution — Unload a loaded solution to free memory
- rebuild_solution — Force a full reload of the analyzed solution
- start_background_task — Queue a long-running tool (currently
rebuild_solution) to run in the background; returns ataskIdto poll - get_task_status — Get the current status, result, or error of a background task by its
taskId - list_running_tasks — List background tasks running or completed within the last 5 minutes
- trust_solution — Authorize a solution to run Roslyn analyzers (required before
get_diagnosticswithincludeAnalyzers: true) - list_trusted_paths — Inspect the persistent trust store + session-trusted solutions
- revoke_trust — Revoke a previously-granted trust for a solution path
- 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_overloads — Every overload of a method/constructor (source + metadata) with full parameter and modifier detail in one call
- get_extension_methods — Every extension member applicable to a type — including arrays, nullables and tuples — from the solution and referenced assemblies (so LINQ shows up), using Roslyn's own applicability rules; covers C# 14
extensionblocks including properties and static members - get_operators — Every user-defined operator and conversion operator on a type (source + metadata) with kind, signature, parameters, and source location. Includes synthesized record equality and .NET 7+ checked variants
- get_call_graph — Transitive caller/callee graph for a method, depth-bounded with cycle detection
- get_file_overview — Compound tool: types defined in a file + file-scoped diagnostics in one call




