You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The reconnect fix (#16) adds a transparent in-flight retry: when a tools/call sees a dropped backend session mid-call, the proxy reconnects and re-issues the same request once (backend.go:~449-465).
Gap
conn.call returns the dropped-session error on the <-c.closed branch without distinguishing:
request never reached the backend (safe to retry), vs
request executed on the backend, but the process died before the response was read (NOT safe to retry).
So for a side-effecting tool (payment, send, delete, write SQL), the retry can cause double execution. MCP has no idempotency key, so this is at-least-once by construction.
For the current BukuWarung demo this is harmless (tools are reads: getUserInfo, lookup_customer, get_sales_summary, run_sql_report). It becomes real once write/side-effecting tools are governed.
Fix direction
Gate the auto-retry to pre-dispatch failures only: retry iff the request was not yet written to the backend (connect/handshake failure, or write that provably didn't complete). If the request was already written, surface the retryable error to the client instead of silently re-executing — i.e. at-most-once for dispatched calls.
Follow-up from #16 (proxy stdio reconnect)
The reconnect fix (#16) adds a transparent in-flight retry: when a
tools/callsees a dropped backend session mid-call, the proxy reconnects and re-issues the same request once (backend.go:~449-465).Gap
conn.callreturns the dropped-session error on the<-c.closedbranch without distinguishing:So for a side-effecting tool (payment, send, delete, write SQL), the retry can cause double execution. MCP has no idempotency key, so this is at-least-once by construction.
For the current BukuWarung demo this is harmless (tools are reads:
getUserInfo,lookup_customer,get_sales_summary,run_sql_report). It becomes real once write/side-effecting tools are governed.Fix direction
DoD
References
cmd/axonflow-mcp-proxy/backend.gocallWithReconnect/conn.call<-c.closedbranch