Skip to content

Transports and the tray

Steven Blom edited this page Sep 14, 2026 · 2 revisions

Transports and the tray

RoseMcp.Server.exe                                   # stdio (default)
RoseMcp.Server.exe --transport http --port 5077      # http + GET /admin/workspaces
RoseMcp.Tray.exe                                     # tray UI, hosts the broker in-process

HTTP mode outlives any one client session, so a reconnecting agent reattaches to solutions that are already warm. It binds 127.0.0.1 by default and refuses a non-loopback bind unless ROSEMCP_TOKEN is set — this server reads and rewrites source anywhere it can reach.

Register it as stdio and the two stop being alternatives. With a tray already running, a stdio server starts no workers of its own: it relays to the tray, which owns them. That is the arrangement worth having, because each half supplies what the other cannot. A stdio process knows the directory its client started it in, so a call naming no workspace resolves to the right solution; an http broker serves every repository on the machine at once and, with two solutions open, genuinely cannot tell which one a bare call means. Relaying gives both at the same time — one warm worker per solution shared by every session, and a correct answer per session — and the tray still sees every workspace, because it is still the one holding them. With no tray running, the same stdio server starts its own workers and behaves exactly as it did before.

The tray app (Windows only) hosts the same broker in-process and shows one card per workspace: whether it is loading, loaded, degraded or faulted; the MSBuild configuration it was loaded under, its project count and how long the load took; the worker's PID and uptime; and memory sampled from outside the worker so a hung one still reports real numbers. A degraded or faulted workspace says why, with the fix. Under that is what the worker is doing right now — the tool being served, what it is aimed at, how long it has been going, and how far through it is — plus the last few operations to finish, failures called out with their reason. A warm Roslyn host otherwise looks identical whether it is idle or two minutes into a design-time build. The same data comes back from GET /admin/workspaces. Closing the window hides it; the tray icon brings it back, and Exit in its menu is what stops the broker and, with it, every worker.

Under the workspaces is a card per debug session — what is being debugged, whether its target is running or held and at what, which XAML framework it runs and whether a provider is resident in it, and how long ago it last said anything. GET /admin/sessions returns the same. Inspect on a card opens the inspector on it.

Diagrams of both arrangements, including where the live-app host, the XAML tap and the inspector sit, are on Architecture.

Clone this wiki locally