Windows-first MCP gateway: .NET project graph, evidence-bounded context, honest change-impact, long-running process hygiene
WinCode demonstrates strong schema completeness and detailed parameter documentation across 14 tools. Most tools have well-structured JSON schemas with type constraints, min/max bounds, and enum restrictions. Descriptions are generally comprehensive (100-300 chars), explaining WHAT the tool does and WHEN to use it. However, several tools exhibit overly technical descriptions that assume deep domain knowledge (Roslyn, UTF-16 columns, snapshot IDs), reducing LLM clarity. Error handling guidance is present but inconsistent, some tools document recovery paths (prepare_context nextRequest), others do not. Tool naming follows verb_noun convention well (search_text, find_code_symbol, list_windows). Composition is sound: tools chain via returned IDs and locations. Security is strong: no credentials in parameters, path traversal blocked. Main gaps: descriptions occasionally bury actionable guidance in technical jargon; some tools lack explicit error classification (retryable vs fatal); a few parameters accept additionalProperties:true, weakening schema strictness.
Workspace overview from project files. For .NET, emits sln/csproj dependency graph and entry points. Directory folder names are hints only, not architecture judgments.
Diagnoses project health, Windows/.NET SDK readiness, solution files, configured code provider/Repomix status, and a lightweight runtime snapshot. dotnet --version or a live Host does not prove complete semantic evidence.
Reads one bounded UTF-8 source/text file, reports its observed line count/byte size and local declaration outline with prepare_context nextRequest arguments. No method-end or semantic identity claim. Other supported text formats return metadata with declarationsSupported=false. Lexical failures identify the affected file.
Locates code declarations with signatures and positions using the configured provider. Direct Roslyn returns snapshot-bound location objects for exact reference selection; old locations expire after edits/reloads or changing connections. Inspect source, queryComplete, truncation and limitations.
Queries references within the configured provider scope. For direct Roslyn pass a returned declaration location as symbolLocation and its name as symbolName; simple names return candidates without choosing a potentially ambiguous overload. Stale locations must be searched again. Zero or incomplete references do not imply safe deletion.
Descriptions use technical jargon (UTF-16 columns, snapshot IDs, Roslyn, lexical failures) that obscures intent for LLMs unfamiliar with .NET tooling. Descriptions should lead with user-facing intent, then add technical details.
Several tools accept additionalProperties:true in input schemas (wincode_search_text, wincode_file_outline, wincode_prepare_context, wincode_find_code_symbol, wincode_find_references, wincode_ui_list_windows, wincode_ui_inspect, wincode_ui_review, workspace_open, wincode_list_directory, wincode_hello_world, wincode_analyze_workspace, wincode_diagnose_project, wincode_safe_move_to_trash), weakening schema strictness and allowing LLMs to pass unexpected fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Passive heartbeat: current instance version, tool contracts and known adapter state, without starting probes. healthObservation includes observation time; unknown/null means not probed, and known state may be stale. Use wincode_diagnose_project for active checks. Local text availability does not mean Roslyn semantic analysis is configured.
Lists a bounded directory within the active workspace on demand. Returns relative paths, traversal gaps and actual visited/returned counts. Does not change symbol-search or cache-fingerprint rules. Use a narrower path after truncation; no snapshot or cursor is retained.
Returns compact file evidence with actual source ranges and omission metadata. Explicit lineRanges report final complete-line coverage and recoverable missing ranges after serialization; a partial last line is not covered. Other requests do not establish full method/task coverage. maxTokens budgets ALL response text using characters/4 (not a model tokenizer). Set includeFullText for packed bodies; legacy opts into JSON plus Markdown.
Safely moves an obsolete or deleted file into the project trash/ directory with metadata instead of permanent deletion.
Searches a literal single-line string in bounded workspace files/directories without a semantic Host. Returns one match per line, UTF-16 columns, clipped previews and executable prepare_context nextRequest arguments. Inspect queryComplete, fileIssues and omitted counts; zero matches do not prove absence outside the scanned scope.
Inspects a Windows desktop application window using UI Automation. Returns a bounded control tree (JSON) and optional annotated screenshot (MCP image content). Requires either pid or hwnd.
Lists visible top-level Windows windows without activation, screenshots or control traversal. Optional filters are combined with AND. Select a returned PID and HWND explicitly; titles do not establish project ownership. Results may become stale immediately.
Collects one UI snapshot and literal AutomationId candidates in supplied WPF XAML files. Optional C# files provide Click/simple Binding candidates and scoped next requests. Reports ambiguity; runtime/source identity and binding causality remain unverified.
Confirms or recovers the workspace fixed at Gateway startup and returns a compact project summary with at most 8 entry paths. Another root is rejected with WORKSPACE_MISMATCH before any state change; select that project connection instead. Healthy same-root confirmation preserves the Roslyn Host and snapshot; known HOST_RESTART_REQUIRED or workspace recovery still requires explicit recovery. Default output is bounded to 8000 UTF-16 characters; counts describe bounded discovery, not a complete inventory. Directory tree is opt-in and bounded; use wincode_list_directory for focused browsing.
Error handling descriptions are inconsistent. Some tools (wincode_prepare_context, wincode_find_references) document recovery paths and omission metadata; others (wincode_diagnose_project, wincode_analyze_workspace) lack explicit guidance on what to do if the operation fails or returns partial results.
Tool names like 'wincode_hello_world' and 'wincode_ui_review' are less action-oriented than the pattern baseline. 'hello_world' is a greeting, not a verb_noun action; 'ui_review' is vague (review what? for what purpose?). Consider 'wincode_health_check' and 'wincode_ui_source_review'.
Output schemas are not explicitly documented in the tool definitions. While input schemas are comprehensive, LLMs cannot see what fields to expect in responses, forcing them to infer structure from descriptions or trial-and-error.