MCP server for .NET code analysis using Roslyn. Provides tools for architecture validation, dependency injection analysis, EF Core model discovery, anti-pattern detection, circular dependency detection, dead code identification, and semantic code navigation.
Strong semantic analysis tools with clear, domain-specific descriptions (avg 180 chars). All 16 tools have descriptions and most parameters are typed. However, input schemas are minimal, most tools accept 0-2 params with sparse constraint documentation. Output schemas are undocumented (tools return JSON strings, but structure is not declared). Error handling is absent; tools return plain strings on failure with no recovery guidance. No tool annotations (readOnlyHint, destructiveHint). Parameter descriptions lack format/range constraints (e.g., 'filePath' has no path validation rules). Composition is strong, tools chain well (find_symbol → find_references → find_callers). Naming is excellent (verb_noun, clear intent). Security: no secrets exposed, but no audit logging visible.
Analyzes project references against clean architecture rules. Detects violations like Domain referencing Infrastructure or Application referencing API. Returns layer classification and all violations.
Cross-references DI registrations with consumers. Returns registered services, missing registrations (consumed but not registered), and captive dependencies (Scoped inside Singleton).
Scans source for common .NET anti-patterns: async void, broad catch(Exception), DateTime.Now, new HttpClient(), sync-over-async (.Result/.Wait()), missing CancellationToken on async methods, string interpolation in ILogger calls, and Thread.Sleep. Syntax-based — fast across whole solution. Skips test files and generated code.
Detects circular dependencies in the project reference graph using DFS. Cycles between projects break the build and indicate architectural issues. Returns each cycle as an ordered list of project names.
Finds all callers of a specific method using semantic call-graph analysis (not text search). Returns each call site's file, line, surrounding code, and the containing method. Useful for impact analysis and hot-path identification.
Output schemas undocumented. Tools return JSON strings but structure (fields, types, nesting) is not declared. LLMs cannot plan downstream calls or extract specific fields without trial-and-error parsing.
No error handling or recovery guidance. Tools return plain strings on failure (e.g., 'File not found: {filePath}') with no actionable next steps. LLMs cannot distinguish retryable errors from user-fixable ones.
Parameter constraints missing. 'filePath' and 'symbolName' lack format/validation rules (e.g., 'relative path from solution root', 'case-sensitive', 'max 256 chars'). LLMs cannot validate input before calling.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Identifies unreferenced types and members across the solution using semantic analysis. Returns confidence-scored results (high for private, medium for internal, low for public). Skips tests, fixtures, migrations, interfaces, entry points, and framework conventions to reduce false positives. Capped at 100 items.
Finds all classes with constructor injection across the solution. Returns type, file, line, and constructor parameter types for each consumer.
Finds all DI service registrations across the solution. Returns interface, implementation, lifetime, method, file, and line for each registration.
Finds all implementations of an interface or overrides of a virtual/abstract method across the solution. Returns the implementing type, file, and line.
Finds all references to a symbol (class, method, property, interface) across the solution. Returns file, line, and surrounding code for each reference.
Locates a type, method, property, field, or event by name across the entire solution. Returns each definition's file, line, kind, and containing type. Useful when you don't know which file a symbol lives in.
Returns member signatures (no bodies) for classes in a file. Provide a relative file path and optionally a class name to filter.
Discovers all EF Core DbContexts and their entity models across the solution. Returns entity properties, navigation relationships, key detection, and configuration method (fluent/annotations/convention) for each entity.
Returns the full source of a specific method. More token-efficient than reading an entire file when you need one method.
Returns the full solution structure: projects, references, document counts, and detected frameworks.
Invalidates the cached workspace and reloads the solution from disk. Use after adding/removing projects or making structural changes.
No tool annotations. Tools lack readOnlyHint (all are read-only) and destructiveHint (reload_solution is reversible but not marked). Agents cannot infer safety properties.
Result limits not enforced or documented. find_dead_code caps at 100 items, but other tools (find_references, find_callers) have no stated limits. Large result sets risk context window exhaustion.