Msvc.Info

VS MCP Server — Project Overview & Development Estimates

What It Is

A Visual Studio 2022 Extension that runs an MCP (Model Context Protocol) server inside Visual Studio, giving AI coding assistants real-time access to Roslyn's semantic understanding of the codebase — the same engine that powers IntelliSense.

Instead of AI tools blindly grepping files, they get structured, semantic access to solution structure, symbol search, inheritance trees, refactoring, build/test execution, and editor context — all through a standardized protocol with 70–90% token savings via compact output formatting.

20 MCP Tools 3 Transports 4 Projects 188 Tests .NET 4.7.2 + .NET 8

Architecture

graph TB
    subgraph VS["Visual Studio 2022"]
        EXT["Extension Entry\nVSIX Package"]
        HOST["MCP Server Host\nstart · stop · restart"]
        SDK["MCP SDK Server\nModelContextProtocol"]
        SETTINGS["Settings UI\nToolWindow + XAML"]
        STORE[("JSON Settings\nper-solution .mcp/")]

        EXT --> HOST
        EXT --> SETTINGS
        HOST --> SDK
        SETTINGS --> STORE
    end

    subgraph TOOLS["20 MCP Tools"]
        NAV["Navigation\nSolutionTree · Outline\nProjectRefs"]
        SYM["Symbol Search\nFind · Definition · Usages\nInheritance · Callers"]
        EDIT["Editor Context\nActiveFile · Selection"]
        CMD["Commands\nBuild · Clean · AsyncTests"]
        PATH["Path Translation\nWindows · WSL · URI"]
        REF["Refactoring\nRename · Format"]
    end

    SDK --> TOOLS
    TOOLS -.->|"Roslyn API"| ROSLYN[("Roslyn\nWorkspace")]
    TOOLS -.->|"DTE API"| DTE[("VS DTE\nServices")]

    subgraph TRANSPORT["Transports"]
        HTTP["HTTP\nHttpListener\nport 3001"]
        SSE["SSE\nServer-Sent Events"]
        STDIO["Stdio Bridge\n.NET 8 Console"]
    end

    HOST --> HTTP
    HOST --> SSE
    STDIO -->|"HTTP"| HTTP

    CC["AI Coding CLI"] -->|"HTTP"| HTTP
    GEM["Gemini CLI / Codex"] -->|"HTTP"| HTTP
    CD["AI Desktop App"] -->|"stdio"| STDIO
    OTHER["Aider · Cline\nWindsurf · OpenCode"] -->|"HTTP/SSE"| HTTP
  

Solution Structure

ProjectTypePurpose
Msvc.Info.NET 4.7.2 VSIXExtension host, 20 tools, transports, commands, settings UI (34 files)
Msvc.Info.Core.NET 4.7.2 LibraryShared logic — settings, path translation, TRX parser, models, interfaces (23 files)
Msvc.Info.StdioBridge.NET 8 Consolestdio-to-HTTP bridge for AI desktop apps (1 file)
Msvc.Info.Tests.NET 8 xUnit188 unit tests with Moq (17 files)

Development Time Estimate

How long would a super senior .NET developer take to build this from scratch, writing all code by hand?

Phase Breakdown

#PhaseDaysWhat's Involved
0 Environment + Research 2 Install VS2022 + Extensibility workload + .NET SDK. Read MCP protocol spec. Study VS new extensibility model (VisualStudio.Extensibility). Understand Roslyn workspace APIs. Prototype “hello world” extension.
1 Scaffolding + Extension Shell 1 Create 4-project solution structure. Extension entry point. Menu commands (Start/Stop/Settings). DI registration. Basic Serilog logging.
2 MCP Server + HTTP Transport 2 Integrate MCP SDK NuGet. Custom HttpListener transport (MCP SDK has no built-in for .NET 4.7.2). Server lifecycle: start/stop/restart. Singleton reusability across restarts. First tool responding to a real MCP client.
3 Navigation Tools 2 IVsWorkspaceAccessor abstraction over Roslyn. GetSolutionTree (solution/project hierarchy). GetDocumentOutline (classes, methods, properties via Roslyn syntax trees). GetProjectReferences. Path translation service (Windows/WSL/URI). TranslatePath tool.
4 Symbol Search Tools 3 Heaviest phase — Roslyn's API surface is vast. FindSymbols (SymbolFinder). FindSymbolDefinition. FindSymbolUsages. GetSymbolAtLocation. GetInheritance (base types, derived, interfaces). GetMethodCallers + GetMethodCalls (call hierarchy). Compact output formatters for token efficiency.
5 Editor Context + Build Commands 2 DTE-based editor accessor. GetActiveFile, GetSelection, CheckSelection. ExecuteCommand (build/clean via VS DTE SolutionBuild API). Output truncation for large build logs.
6 Async Test Execution 2 External process runner (dotnet test). TRX result file parser (deterministic XML). Async workflow: start/status/stop. Token-efficient status reporting (suppress build noise).
7 Settings System + UI 2 Solution-local JSON settings store (.mcp/mcpserver.settings.json). McpSettingsProvider with in-memory caching + change events. Settings ToolWindow with RemoteUserControl (XAML). Port config, path format radios, 7 tool group checkboxes. Tool list filtering at MCP level.
8 SSE Transport + Stdio Bridge 1 SSE (Server-Sent Events) transport variant. .NET 8 console app as stdio-to-HTTP bridge for AI desktop app compatibility.
9 Refactoring + Analysis Tools 1 RenameSymbol (Roslyn rename across entire solution). FormatDocument (VS formatting engine). SetLogLevel + GetLoggingStatus (Serilog LevelSwitch).
10 Testing 2 188 unit tests covering: settings (30), commands (19), transports (9), tool filters (4), path translation, TRX parser. Moq for all VS service abstractions. Manual integration testing with real AI clients.
11 Polish + Publish 1 Compact output optimization (70–90% token reduction). VSIX packaging. VS Marketplace publishing. README with client configuration for 8+ AI tools.
TOTAL 21 ~4 working weeks

Where Time Actually Goes

Implementation
45%
Research / API lookup
25%
Debugging VS quirks
20%
Testing + stabilization
10%

Risk Factors

RiskImpactLikelihood
VS new Extensibility model gaps (no StatusBar API, XAML limitations, no converters) +1–2 days of workarounds High — we hit this
HttpListener transport not in MCP SDK (had to write custom from scratch) +1–2 days High — we hit this
.NET 4.7.2 limitations (no init properties, missing modern APIs) +0.5 days scattered Medium
Roslyn API complexity for call hierarchy analysis +1 day Medium
VSIX packaging quirks (telemetry bug, manifest caching, VsixPublisher crash) +0.5 days Medium

What AI Assistance Changes

ScenarioMultiplierTotal
Manual coding + AI for lookups only (this estimate) 1x ~21 working days (~4 weeks)
Realistic (some VS APIs don't work as documented, rabbit holes) 1.3x ~27 days (~5.5 weeks)
With AI coding assistance (AI assistant writing ~90% of code) 0.4x ~8–10 days (~2 weeks)

Key Observations

  1. Research is the hidden time sink. VS Extensibility new model is poorly documented. MCP protocol has edge cases. Roslyn's API surface is enormous. A super senior can navigate faster, but still needs to read and experiment. AI lookup (ChatGPT) saves ~1–2 days vs pure documentation reading.
  2. Symbol Search (Roslyn) is the hardest implementation phase. 7 tools all hitting different Roslyn APIs (SymbolFinder, syntax trees, semantic model). Call hierarchy and inheritance require deep understanding of Roslyn's compilation model. 3 days optimistic — this could easily become 5 with edge cases.
  3. Custom transport is an unexpected cost. The official MCP SDK doesn't ship an HTTP transport for .NET 4.7.2. Building HttpListener-based transport with proper lifecycle management (restart, port reuse, dispose) is a full 2-day effort that wouldn't be obvious from the initial spec reading.
  4. VS debugging is inherently slow. Every test cycle requires launching a VS experimental instance (~30s startup). This multiplies debugging time by ~3x compared to normal .NET development. No amount of skill eliminates this overhead.
  5. The settings UI has disproportionate complexity. RemoteUserControl (VS Extensibility's XAML) has no standard converters, limited DataTemplate support, and XAML must be EmbeddedResource with PageRemove. A simple settings dialog takes 2 days instead of the expected 0.5 days.
Bottom line: A super senior developer who knows what they want, with AI assistance for API lookups only, can build this from zero to published on the VS Marketplace in approximately 4 working weeks (optimistic). With AI writing the code (AI coding assistants), this compresses to ~2 weeks.

Actual Development Timeline (with AI Coding Assistant)

The project was built with an AI coding assistant writing ~90% of the code, directed by a senior developer who designed architecture and made all decisions. Human role: architecture, vision, decisions, prompting, review, manual testing in VS. Development happened in sporadic bursts over 9 months, not continuous full-time work.

105 Commits 146 Files 28,263 Lines ~75–85 Hours

Development Sprints

PeriodDaysCommits~HoursWhat Was Built
May 15–20, 2025 6 35 25–30 Initial prototype: VS extension shell, first MCP tools (navigation, symbol search, editor context), HTTP transport, SSE transport, compact output formatting
Jun 7–10, 2025 4 23 15–20 Migration to official MCP SDK. Complete tool suite rewrite. Token optimization (70–90% reduction). Process-based test execution with TRX parser. StdioBridge. Documentation.
— 2 month pause —
Aug 8, 2025 1 1 ~2 Fix: GetInheritance interface lookup. Block synchronous test execution to prevent VS hanging.
Sep 8, 2025 1 1 ~2 Bug fixes, add file logging (Serilog), bump v1.8.0
— 3 month pause —
Dec 8–11, 2025 4 13 15–20 Settings system (solution-local JSON). Settings UI (ToolWindow + XAML + ViewModel). All 3 commands (Start/Stop/Settings) with proper state sync. Transport reusability fix. TDDAB methodology. 150 tests passing.
— 6 week pause —
Jan 21, 2026 1 21 ~8 Monster day: settings expansion (path format + tool groups + filtering), RenameSymbol, FormatDocument, VS Marketplace publishing, v2.3.0. 21 commits in one day.
Jan 25, 2026 1 4 3–4 Fix: missing "type" in MCP config docs. Fix: token-wasting lastOutput during async test status.
Jan 29, 2026 1 2 ~1 C++/CMake support research → parked (low priority)
Feb 5–6, 2026 2 5 5–6 v2.4.0 release. README complete rewrite. Marketing materials (Dev.to, LinkedIn, Twitter, landing page). Marketing launch.
TOTAL 21 105 75–85 ~10–11 full working days over 9 months

Estimate vs Reality

PhaseEstimated (manual)Actual (with AI)Speedup
Environment + Research2 days~0.5 days4x
Scaffolding + Extension Shell1 day~0.3 days3x
MCP Server + HTTP Transport2 days~1 day2x
Navigation Tools2 days~0.5 days4x
Symbol Search Tools3 days~1 day3x
Editor Context + Build Commands2 days~0.5 days4x
Async Test Execution2 days~0.5 days4x
Settings System + UI2 days~2 days1x
SSE Transport + Stdio Bridge1 day~0.3 days3x
Refactoring + Analysis Tools1 day~0.3 days3x
Testing2 days~2 days1x
Polish + Publish1 day~1 day1x
TOTAL21 days~10 days2.1x

Key Observations

  1. Sporadic development works surprisingly well with AI. 9 months elapsed, but only ~10 full days of actual work. The AI assistant's memory bank system meant zero ramp-up time between sessions — even after 3-month gaps, context was restored instantly.
  2. Settings UI was the one area with no speedup (1x). VS Extensibility's RemoteUserControl has no standard converters, undocumented XAML quirks, and requires EmbeddedResource + PageRemove workarounds. AI couldn't shortcut the pain because the documentation barely exists. This matches the LSAI experience where LSP debugging resisted AI acceleration.
  3. Jan 21 was the monster day: 21 commits. Settings expansion, tool filtering, RenameSymbol, FormatDocument, and VS Marketplace publishing — all in a single day. This kind of throughput is only possible when AI handles the boilerplate while the human focuses on architecture decisions.
  4. The real bottleneck is manual VS testing. Every change requires launching a VS experimental instance (~30s), connecting an MCP client, and testing tool responses manually. Unit tests cover logic, but integration testing is inherently slow. This is why the speedup is 2.1x instead of the 5–6x seen in LSAI.
  5. Marketing took as much time as some features. 2 days for marketing materials (Dev.to article, LinkedIn, landing page, Twitter) is comparable to building the entire settings system. Non-code work doesn't benefit as much from AI coding assistance.
Actual result: From idea to published VS Marketplace extension with 20 tools, 188 tests, and marketing launch in ~10 full working days spread over 9 months. That's 2.1x faster than the optimistic manual estimate of 21 days, achieved with an AI coding assistant writing ~90% of the code and one senior developer directing everything.