An MCP server for C# and Razor development providing tools for workspace management, symbol navigation, code editing, testing, and build operations
TerseSharp exposes 34 tools for C# development (code navigation, refactoring, Razor component editing, package management). Critical gaps: NO visible input schemas in source code (ToolProfile.cs, ToolGuard.cs show tool registration but schema definitions are not present in provided excerpts). Tool descriptions are sparse or missing entirely, most tools listed without docstrings. Parameter descriptions absent. Error handling exists (ToolArgumentFilter.cs shows structured error responses with remediation hints), but tool-level documentation is severely underdeveloped. Naming is generally clear (verb_noun pattern: load_workspace, get_file_outline, replace_symbol), but lack of schema visibility and descriptions prevents LLMs from understanding parameter constraints and output structure. No evidence of output schema documentation.
find_files glob="src/**/*.{cs,csproj}"
No input schemas visible in source code. ToolProfile.cs and ToolGuard.cs register tools but schema definitions are not present in provided excerpts. Cannot verify parameter types, constraints, or required fields.
Tool descriptions missing or absent for 19 of 34 tools. Only tools with example invocations (find_files, search_text, razor_* tools, package_* tools, search_regex) have minimal descriptions extracted from examples. LLMs cannot determine when to select tools without docstrings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
package_add project="src/App/App.csproj" package="Serilog" version="4.2.0"
package_remove project="src/App/App.csproj" package="Serilog"
razor_add_element path="Components/Card.razor" parent="div" markup="<Badge/>" dryRun=true
razor_bindings path="Components/Card.razor"
razor_codebehind path="Components/Card.razor"
razor_component name="Badge"
razor_find query="Card" kind="component"
razor_outline path="Components/Card.razor"
razor_remove_element path="Components/Card.razor" target="div/button" dryRun=true allowErrors=true
razor_set_attribute path="Components/Card.razor" target="div/Badge" attribute="Count" value="0" dryRun=true
razor_set_directive path="Components/Card.razor" directive="using" value="System.Text" dryRun=true
razor_validate scope="solution"
search_regex query="class \\w+Service" glob="src/**/*.cs"
search_text query="OrderService" glob="src/**/*.cs"
No parameter descriptions visible. Tools accept parameters (e.g., find_files glob=, search_text query=, razor_set_attribute path= target= attribute= value=) but parameter semantics, constraints, and types are undocumented. LLMs cannot infer valid values.
No output schema documentation. Tools return results but expected response structure (fields, types, pagination) is not documented. Agents cannot plan downstream tool calls or extract required IDs.
Destructive tools (replace_symbol, replace_symbol_body, write_text, edit_text, build, run_tests, razor_set_attribute, razor_add_element, razor_remove_element, razor_set_directive, package_add, package_remove) lack dry-run or confirmation patterns. No evidence of idempotent hints or destructiveHint annotations.