Releases
Changelog
Every version and its notes, generated from CHANGELOG.md. Install any version from NuGet.
- v1.4.0latestJul 4, 2026
Added
- MCP tool annotations on every tool (
readOnlyHint,idempotentHint,openWorldHint) so hosts can reason about permissions and caching. All tools are read-only exceptswitch_solution, which is marked writable but non-destructive and idempotent - Per-call invocation logging: each
tools/callis wrapped in a filter that logs a short correlation id, the tool name, wall-clock duration, and success/failure/cancellation to stderr — traces a client-visible error back to a specific server log line benchmarks/RoslynLens.TokenBenchmark— a reproducible, offline token-savings benchmark that compares full source files against the realget_public_apioutput using the GPT-4o (o200k_base) tokenizer; writesdocs/BENCHMARKS.md(77% pooled / 73% median reduction self-hosted)Dockerfile+.dockerignorefor containerized distribution (SDK-based image, required becauseMSBuildWorkspaceevaluates MSBuild at runtime)- MCP Bundle manifest under
mcpb/for one-click installation in Claude Desktop (packs to a.mcpbvianpx @anthropic-ai/mcpb pack); launches the server withdnxand exposes solution path, timeout, cache size, log level, and max results through the bundle's settings UI ROSLYN_LENS_SOLUTIONenvironment variable to point at a.sln/.slnx(or a directory to search) without a CLI argument; resolution order is now--solutionarg >ROSLYN_LENS_SOLUTION> working-directory auto-discovery- Documentation website under
docs-website/— an Astro site generated from the existingdocs/**markdown (landing page, sidebar docs, light/dark theme), deployed to GitHub Pages via.github/workflows/deploy-website.yml get_diagnosticsgains an opt-inincludeAnalyzersparameter (defaultfalse) that runs the bundled Roslynator analyzers (500+ rules) over the compilation. The analyzers ship next to the tool and load reflectively at runtime; redundant "fade-out" companion diagnostics are filtered out, and the tool falls back to compiler-only diagnostics if they cannot be loaded. Thefilescope andinfo/hiddenseverity filters are now documented
Changed
- Roslynator.Analyzers 4.15.0 bundled with the tool (Apache-2.0), excluded from RoslynLens's own compilation to avoid affecting its build
- Microsoft.ML.Tokenizers 2.0.0 + Data.O200kBase 2.0.0 added (benchmark-only, not shipped in the tool); Microsoft.Bcl.Memory pinned to 10.0.9 to override a vulnerable 9.0.4 pulled transitively (GHSA-73j8-2gch-69rq)
- MCP tool annotations on every tool (
- Jun 8, 2026
Added
get_communities— partitions solution namespaces into cohesive communities using label-propagation over the type-reference graph; returns per-community cohesion score (0–1) and common namespace prefixfind_god_nodes— identifies types or methods whose incoming reference count exceeds mean + N×stddev across the solution; exposes coupling hotspots most likely to benefit from decompositionfind_surprising_dependencies— scores cross-namespace edges on multiple surprise factors (cross-assembly, peripheral-source, hub-target, semantic distance) and returns the least-expected couplings in the codebasefind_isolated_symbols— finds types with degree 0 in the full solution graph (no incoming references and no structural outgoing references to other solution types); distinct fromfind_dead_codewhich only checks incoming references
Changed
- ModelContextProtocol 1.2.0 → 1.4.0
- Microsoft.Extensions.Hosting 10.0.6 → 10.0.8
- Microsoft.Build.Framework 18.4.0 → 18.6.3
- Microsoft.NET.StringTools 18.6.3 added (new transitive dep of
Microsoft.Build.Framework, pinned withExcludeAssets="runtime"to satisfyMicrosoft.Build.Locator) - ICSharpCode.Decompiler 10.0.0.8330 → 10.1.0.8386
- coverlet.collector 8.0.1 → 10.0.1 (test)
- Microsoft.NET.Test.Sdk 18.3.0 → 18.6.0 (test)
- Apr 14, 2026
Added
- Multi-solution hint surfaced in
EnsureReadyOrStatusstatus response (visible during workspace loading) - Multi-solution hint surfaced in solution-scoped tool responses:
get_project_graph,get_diagnostics(solution scope),find_dead_code(solution scope),get_test_coverage_map,validate_conventions WorkspaceManager.SerializeWithMultiSolutionHint<T>()helper that wraps payloads as{ result, hint }only when multiple solutions are discovered (no envelope on single-solution repos)
Addresses #102 raised by @ericnewton76.
- Multi-solution hint surfaced in
- Apr 14, 2026
Changed
- ModelContextProtocol 1.1.0 → 1.2.0
- Microsoft.Extensions.Hosting 10.0.5 → 10.0.6
- Microsoft.Build.Framework 17.11.48 → 18.4.0
- ICSharpCode.Decompiler 9.1.0.7988 → 10.0.0.8330
- Apr 14, 2026
Added
- Multi-solution support: discover all
.sln/.slnxfiles at startup instead of silently picking one list_solutionsMCP tool — lists all discovered solutions with path, name, andIsActiveflagswitch_solutionMCP tool — switch the active workspace to a different discovered solution at runtimeSolutionDiscovery.BfsDiscoverAll()— returns all solutions ordered by depth then alphabeticallyWorkspaceManager.ReloadSolutionAsync()— full dispose + fresh workspace reload with rollback on failureWorkspaceManager.GetMultiSolutionHint()— contextual hint when multiple solutions are present- Startup warning when multiple solutions are discovered
Thanks to @ericnewton76 (Eric Newton) for the initial implementation (#96).
- Multi-solution support: discover all
- Mar 26, 2026
Fixed
- JSON responses no longer escape quotes as
\u0027— use relaxed encoding for human-readable MCP output - Environment variable prefix renamed from
ROSLYN_NAV_toROSLYN_LENS_
Changed
- NuGet package size reduced from 13MB to 9.2MB by excluding Roslyn localization satellites and legacy BuildHost-net472
- JSON responses no longer escape quotes as
- Mar 20, 2026
Changed
get_project_graphnow supports filtering by project name (projectFilter), transitive dependency expansion (includeTransitive), and result limiting (maxResults, default 50) to prevent output overflow on large solutions
- Mar 19, 2026
Added
- 28 MCP navigation and analysis tools
- 18 anti-pattern detectors (AP001-AP009, GR-GUID, GR-SECRET, GR-SYNC-EF, GR-BADREQ, GR-REGEX, GR-SLEEP, GR-CONSOLE, GR-CFGAWAIT, GR-DTO)
- Compound tools (
analyze_method,get_type_overview,get_file_overview) - Batch tools (
find_symbols_batch,get_public_api_batch,get_symbol_detail_batch) - Advanced analysis (
analyze_data_flow,analyze_control_flow,get_complexity_metrics,detect_duplicates,resolve_external_source) - Glob pattern search (
*Service,Get*User) infind_symbol - Fuzzy FQN resolution with partial namespace matching and Levenshtein distance
- Dead code analysis with granular filters (
includePublicMembers,includeEntryPoints,projectFilter,fileFilter) - Environment variable configuration (
ROSLYN_LENS_TIMEOUT_SECONDS,ROSLYN_LENS_MAX_RESULTS,ROSLYN_LENS_CACHE_SIZE,ROSLYN_LENS_LOG_LEVEL) - BFS solution auto-discovery (
.sln/.slnx, max 3 levels) - LRU compilation cache (configurable, default 50 entries)
- File watcher for incremental updates
- Background async solution loading
- Cross-project symbol resolution via
SymbolResolver - ICSharpCode.Decompiler for external source resolution
- SonarCloud integration
- GitHub Actions CI/CD (build + release + NuGet publish)
- Global dotnet tool distribution (
dotnet tool install --global RoslynLens) - Comprehensive documentation in
docs/
Changed
- Renamed project from
JFM.RoslynNavigatortoRoslynLens - NuGet package ID changed to
RoslynLens - MCP server name changed to
roslyn-lens - Tool command changed to
roslyn-lens
- Mar 14, 2026
Initial release as
JFM.RoslynNavigator.Added
- 17 MCP navigation tools (find_symbol, find_references, find_callers, find_implementations, find_overrides, find_dead_code, get_public_api, get_symbol_detail, get_project_graph, get_dependency_graph, get_module_depends_on, get_type_hierarchy, get_diagnostics, get_test_coverage_map, detect_antipatterns, detect_circular_dependencies, validate_granit_conventions)
- 18 anti-pattern detectors
- MSBuildWorkspace with LRU compilation cache
- BFS solution auto-discovery (
.sln/.slnx, max 3 levels) - Background async solution loading
- GitHub Actions CI/CD (build + release + NuGet publish)
- Global dotnet tool distribution (
dotnet tool install --global JFM.RoslynNavigator)