I’m using DevSpace with ChatGPT over the remote MCP endpoint for normal coding work on my Mac.
The specific reliability problem here is not the transport disconnect itself. It is what happens when a local side effect has already started or completed, but the MCP response is lost before the caller receives it.
Two concrete cases:
- A file mutation succeeds locally, but ChatGPT does not receive the result. A blind retry can repeat the mutation or act on stale file state.
exec_command creates a process session locally, but the response containing the sessionId is lost. The process can continue running while the caller no longer has its handle. The same retry problem applies to write_stdin, where repeating an unknown call could send input twice.
The scope here is only recovery from that lost-response ambiguity. DevSpace does not need to handle tunnel failures or reconnect the transport itself.
The current #335 approach uses a required stable operationId on side-effecting tools. DevSpace records the first operation result in memory for the lifetime of the server process. An exact retry with the same operation ID joins/replays the original operation instead of repeating the side effect; using the same ID with different arguments fails closed. File write/edit also keep an expected-before content hash as a second guard for a new operation based on stale state.
This is intentionally process-local. It does not try to survive a DevSpace restart, which is a separate lifecycle problem.
I’m using DevSpace with ChatGPT over the remote MCP endpoint for normal coding work on my Mac.
The specific reliability problem here is not the transport disconnect itself. It is what happens when a local side effect has already started or completed, but the MCP response is lost before the caller receives it.
Two concrete cases:
exec_commandcreates a process session locally, but the response containing thesessionIdis lost. The process can continue running while the caller no longer has its handle. The same retry problem applies towrite_stdin, where repeating an unknown call could send input twice.The scope here is only recovery from that lost-response ambiguity. DevSpace does not need to handle tunnel failures or reconnect the transport itself.
The current #335 approach uses a required stable
operationIdon side-effecting tools. DevSpace records the first operation result in memory for the lifetime of the server process. An exact retry with the same operation ID joins/replays the original operation instead of repeating the side effect; using the same ID with different arguments fails closed. Filewrite/editalso keep an expected-before content hash as a second guard for a new operation based on stale state.This is intentionally process-local. It does not try to survive a DevSpace restart, which is a separate lifecycle problem.