Remote 0.2.47 can report online/pong while all execution tools return Not connected
Summary
Remote Desktop Commander 0.2.47 can enter a false-healthy state where the control plane looks healthy but the execution data plane is unusable.
Observed from a ChatGPT Remote MCP connector on Windows:
list_devices: device isonlineauth_token:valid- capabilities include
app_version: 0.2.47andtransport_broadcast_v1: true last_seencontinues to advanceping: returnspong- execution tools such as
read_file,get_config,start_process, andget_recent_tool_calls: returnNot connected - during the same incident,
shutdowncan intermittently returnNo devices availableeven whilelist_devicessaysonline - after the transport briefly recovered,
shutdownreached the device and cleanly set it offline; this confirms a half-open / control-plane-data-plane divergence rather than an authorization or permission failure
Why ping is not a sufficient health probe
MCPDevice.handleNewToolCall() handles ping directly in the remote device process. It does not exercise DesktopCommanderIntegration.callClientTool() or the local stdio MCP connection. Therefore pong proves only that one remote-delivery path reached the device process; it does not prove that file/process tools are executable.
DesktopCommanderIntegration sets isReady = true after the initial stdio connection. callClientTool() catches and rethrows failures but does not invalidate isReady, reconnect the stdio transport, retry once, or terminate the remote agent so an external supervisor can restart it.
The Broadcast/Presence transport can also produce contradictory observations when presence/capability state and the legacy/device row diverge: one API can still list the row as online while dispatch resolves no usable target.
Requested behavior
- Replace or supplement
pingwith a structured end-to-end readiness probe that traverses the local MCP data plane, for examplemcpClient.listTools()with a short timeout. - Publish separate health fields such as:
- remote channel reachable
- presence tracked
- local stdio MCP connected
- local tools count
- last successful forwarded tool timestamp
- connection generation
- On
Connection closed,Not connected, or equivalent transport errors incallClientTool():- serialize recovery with a single-flight guard
- close stale client/transport with bounded timeouts
- re-run
initialize() - retry only the same read-only probe/tool once when safe
- otherwise mark execution readiness false and exit non-zero or expose an explicit restart signal
list_devicesand dispatch should not report a device as execution-ready solely from row status, token validity, heartbeat, or remotepong.- Add a regression test for this exact matrix:
- remote agent and heartbeat alive
- local stdio child disconnected
pingsucceeds- ordinary tool fails
- watchdog/reconnect restores ordinary tool execution without manual intervention
- Add a consistency test ensuring
list_devices,shutdown, and ordinary dispatch resolve the same effective device generation during presence degradation.
Impact
A watchdog that trusts ping, TCP 443, process presence, token validity, or last_seen will classify the device as healthy forever. The user sees repeated Not connected errors and must manually restart the agent, defeating unattended recovery.
Source: wonderwhy-er/DesktopCommanderMCP