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:
AxsgPreviewQueryServiceAxsgRuntimeQueryServiceAxsgWorkspaceLanguageQueryServiceThe transport-neutral runtime mutation layer now lives in services such as:
AxsgRuntimeHotReloadServiceAxsgRuntimeHotDesignServiceAxsgRuntimeStudioServiceThose are consumed by LSP, MCP, preview, and studio adapters 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, focused snapshot resources, per-build hot design workspace resources, 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:
The runtime MCP host now distinguishes between:
axsg://runtime/hotdesign/statusaxsg://runtime/hotdesign/workspace/current, .../document/selected, and .../element/selectedaxsg://runtime/hotdesign/workspace/by-build-uri/<escaped-build-uri>That split exists so clients can keep local state synchronized without rereading the entire coarse workspace after every small mutation.