AXSG now has one shared remote-operation layer that serves LSP, MCP, preview orchestration, and studio/runtime remote surfaces.
The important design choice is:
LSP and MCP both use JSON-RPC 2.0 and commonly run over framed stdio transports, but they solve different problems:
AXSG therefore shares:
AXSG does not share:
That keeps the remote stack reusable without forcing editor concepts onto MCP clients.
| Surface | Adapter | Shared layer underneath |
|---|---|---|
| Standalone language server | XamlToCSharpGenerator.LanguageServer.Tool |
RemoteProtocol.JsonRpc plus shared query services |
| Workspace MCP host | XamlToCSharpGenerator.McpServer.Tool |
RemoteProtocol.JsonRpc plus McpServerCore plus shared query services |
| Preview helper command transport | PreviewHostCommandRouter |
shared preview payload contracts |
| Preview MCP host | PreviewHostMcpServer |
shared preview payload contracts plus shared MCP core |
| Studio remote design server | AxsgStudioRemoteCommandRouter |
shared runtime query services plus shared studio contracts |
| Runtime MCP host | XamlSourceGenRuntimeMcpServer |
shared runtime query services plus shared MCP core |
XamlToCSharpGenerator.RemoteProtocolThis package is the reusable transport and contract layer. It contains:
It is the package to reuse when you need AXSG remote protocols without copying transport code.
The transport-neutral query layer now lives in services such as:
AxsgPreviewQueryServiceAxsgRuntimeQueryServiceThose are consumed by both LSP and MCP hosts so the same operation shape does not get reimplemented per adapter.
AXSG intentionally has more than one MCP host because workspace state and live runtime state are not the same thing.
This host:
axsg-mcpIt does not automatically attach to a live Avalonia app.
This host:
resources/subscribe and event-style resource updatesThis is the host you want for dotnet watch, hot reload, hot design, and live-app inspection.
This host:
This is the host you want when preview is the system under test.
The VS Code extension is a product surface, not just a transport wrapper. It still owns:
The extension can reuse the shared remote-operation layer, but it still needs editor-specific orchestration that does not belong in MCP or LSP core contracts.
AXSG now uses a capability-based model:
This split matches the real ownership model of the processes instead of pretending one host can answer every question equally well.
Preview MCP now supports in-process live preview application directly through:
axsg.preview.hotReloadThat operation is intentionally different from the lower-level:
axsg.preview.updatehotReload waits for the preview session to complete the in-process apply and returns the concrete result payload. update is still available for dispatch-only flows and compatibility with clients that already consume the lifecycle resources asynchronously.
This keeps the preview host aligned with the rest of AXSG’s shared remote-operation model: