MCP server for C# code analysis and refactoring. Provides tools to load solutions, analyze type hierarchies, detect code smells, and propose refactorings (rename, extract interface, extract superclass, extract class).
Kata MCP exhibits solid tool design with clear verb-noun naming (load_solution, propose_rename, apply_change_set) and comprehensive parameter descriptions. All 13 tools have descriptions (avg ~120 chars) and input schemas with typed parameters. However, output schemas are not explicitly documented in the source, responses are inferred from code (e.g., LoadSolution returns an anonymous object with path, projectCount, projects). Parameter descriptions are generally good but lack explicit constraints (e.g., no enum for 'kind' field values, no format specs for fully-qualified names). Error handling is minimal, no recovery guidance or actionable error messages visible. The tool composition is strong (single responsibility, good chaining via IDs), but the lack of documented output schemas and error patterns prevents a higher score.
Apply a pending change set to disk. Writes all modified files and returns a summary of changes applied.
Discard a pending change set without applying it to disk.
Fetch a pending change set by ID. Returns the full change set with all file diffs and metadata.
Fetch full details for a single type by its fully-qualified name (e.g. "Kata.Core.Intents.RenameIntent"). Auto-loads from the Kata.App session handshake if no solution is explicitly loaded.
Return the entire type graph: all types with their base types and implemented interfaces. Suitable for building a class diagram. Auto-loads from the Kata.App session handshake if no solution is explicitly loaded.
List all detected code smells in the currently-loaded solution. Optional filters: typeFullName restricts to one type, memberSignature restricts to one member. Auto-loads from the Kata.App session handshake if no solution is explicitly loaded.
Output schemas not documented. Tools return anonymous objects (e.g., LoadSolution returns {path, projectCount, projects}) but no formal schema is visible in source. LLMs cannot reliably extract fields or plan downstream calls without documented return types.
No error handling or recovery guidance. Tools throw InvalidOperationException (e.g., 'Type not found: {fullName}') with no actionable next steps. LLMs receive raw exceptions and cannot self-correct or suggest alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
List all projects in the currently-loaded solution with their type counts. Auto-loads from the Kata.App session handshake if no solution is explicitly loaded.
List types across projects. Optional filter: projectName restricts to one project, namespacePrefix filters by fully-qualified namespace prefix. Auto-loads from the Kata.App session handshake if no solution is explicitly loaded.
Load a C# solution (.slnx or .sln) into the Kata session. All subsequent tools operate on the loaded model.
Propose extracting a new class from an existing class. Members are moved to the new class and referenced via a field. Returns a pending change set with the new class source and the modified source class file diff.
Propose extracting an interface from a class. Members are specified by their signature strings (as returned by list_types/get_type). Returns a pending change set with the new interface source and the modified class file diff.
Propose extracting an abstract superclass from a class. Members are moved up (kept in the source class as well). Returns a pending change set with the new superclass source and the modified class file diff.
Propose renaming a type (or one of its members). Returns a pending change set ID and diffs. The change is NOT written to disk until you call apply_change_set.
Parameter constraints not explicit. 'fullName' parameter lacks format spec (e.g., 'Fully-qualified name without global:: prefix, e.g. Kata.Core.Intents.RenameIntent'). 'kind' field values (class, interface, struct, enum) are not enumerated. LLMs may pass invalid values.
No pagination or result limits documented. list_types and list_code_smells could return hundreds of items with no limit or cursor. Large result sets waste tokens and risk context window exhaustion.
Destructive operations (apply_change_set) lack confirmation or dry-run support. No pattern visible to preview changes before writing to disk. Agents could accidentally apply unreviewed refactorings.