MCP server for C# language support via csharp-ls language server
Server has 19 well-named tools with consistent verb_noun patterns (start_session, stop_session, hover, go_to_definition, etc.). All tools have descriptions and input schemas with typed parameters. However, parameter descriptions are minimal (often just the parameter name restated), output schemas are not documented, and error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Composition is strong, tools chain well via session_id, but descriptions lack the depth needed for LLM selection confidence.
Resolve and preview or apply a previously listed code action.
Apply a previously previewed workspace edit.
Get completion items at a file position.
List document symbols for a file.
Find references for the symbol at a file position.
Preview or apply whole-document formatting.
Preview or apply range formatting.
Get the latest known diagnostics for a file.
Parameter descriptions are minimal and often just restate the parameter name. E.g., 'session_id' param in hover() has no description explaining what a session_id is, how to obtain it, or its format. LLMs cannot infer parameter semantics from names alone.
Output schemas are not documented. Tools return complex types (HoverResult, LocationResult, SymbolResult, CompletionResult, etc.) but the response structure is not visible in the tool definition. LLMs cannot plan downstream calls or extract required fields without knowing the output shape.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Resolve metadata source for a csharp:/ metadata URI.
Go to definition at a file position.
Get hover information at a file position.
List code actions for a file range.
List active csharp-ls-backed MCP sessions.
Send a raw LSP request or notification through the underlying csharp-ls session.
Preview or apply a symbol rename.
Get signature help at a file position.
Start a csharp-ls-backed MCP session for a workspace.
Stop an existing csharp-ls-backed MCP session.
Search workspace symbols.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. Tools marked WRITE (start_session, stop_session, apply_workspace_edit, raw_lsp) and REVERSIBLE (apply_code_action, rename_symbol, format_document, format_range) should declare these hints for agent safety.
No error handling guidance. Tools do not document what errors can occur, how to recover, or what the LLM should do next. E.g., if session_id is invalid, what error is returned? Should the agent retry, call list_sessions(), or ask the user?
raw_lsp tool is overly generic and accepts arbitrary LSP method names and JSON parameters. This is a footgun, agents can pass malformed requests, invalid methods, or dangerous operations without validation. Consider restricting to a whitelist of safe LSP methods or removing in favor of domain-specific tools.