$ show codewithmukesh/dotnet-claude-kit
dotnet-claude-kit is an opinionated Claude Code plugin that transforms the AI assistant into an expert .NET 10 developer. It provides 47 skills (knowledge + workflow orchestrators), 10 specialist agents (e.g., dotnet-architect, ef-core-specialist), 10 always-loaded rules, 5 project templates, automation hooks, and a Roslyn-based MCP server (CWM.RoslynNavigator) offering 22 read-only code analysis tools. The MCP server delivers token-efficient semantic queries (symbol resolution, anti-pattern detection, dead code analysis, dependency graphs) via stdio, replacing expensive file reads. The architecture is modular: skills are markdown files loaded on demand, agents route requests to specialists, and the MCP server provides a robust program analysis backend. The system supports multiple AI coding tools (Claude Code, Cursor, Codex CLI, OpenCode) with cross-tool rule parity validation. Its core philosophy emphasizes guided over prescriptive development, modern .NET only (.NET 10/C# 14), and token-conscious interactions. The codebase demonstrates strong engineering with clean abstractions, extensive unit tests (200+ tests), CI/CD for NuGet publishing, and well-documented ADRs. The MCP server components (WorkspaceManager, SymbolResolver, anti-pattern detectors, pagination) are highly reusable and exhibit non-obvious craftsmanship. While the large skill surface requires synchronization, the overall quality is excellent for a developer tooling project.
The LLM identified 5 files worth highlighting for reuse:
Resolves qualified symbol names to Roslyn ISymbol across all projects in a solution. Handles partial names, namespace ambiguity, and kind filtering. Returns structured results with SourceKind classification. Uses MemberNotNullWhen for safe null handling and structured error codes. This component encapsulates the complexity of cross-project symbol resolution and could be extracted for use in any Roslyn-based analysis tool that needs reliable symbol lookup.
Memoizes the classification of source files as generated or not (based on .g.cs extension, auto-generated headers, and obj/bin paths). Provides IsGeneratedFile and IsGeneratedSymbol methods used by all MCP tools to filter out generated code. The pattern is non-obvious: it caches classification per file path and validates via multiple heuristics, preventing false negatives. Reusable in any code analysis pipeline that needs to exclude generated code.
Defines the contract for anti-pattern detectors with properties AppliesTo, RequiresSemanticModel, and a Detect method returning IAsyncEnumerable<AntiPatternResult>. Each detector is a separate class (e.g., DateTimeDirectUseDetector). The interface is clean, extensible, and supports per-kind suppression via DetectionContext. This pattern could be reused in any static analysis tool that needs a pluggable detector pipeline.
Generic paging struct Page<T> with Count, TotalFound, Truncated, and Limit properties. Used uniformly across all list-returning MCP tools. The Truncated flag allows clients to detect incomplete results. This is a simple but essential pattern that ensures consistent pagination behavior across a large tool surface. Could be extracted as a standalone library for any MCP server implementation.
An awk script that scans git diffs for common .NET anti-patterns (e.g., async void, .Result, new HttpClient()) in a token-efficient way. Designed to run as a pre-commit hook with minimal dependencies. It outputs structured issue reports with severity. This component demonstrates a creative use of awk for static analysis and could be reused in any .NET project's commit hooks without needing Roslyn.