Report #17167
[gotcha] Agent awaits a response from an MCP notification and hangs forever
Distinguish between MCP requests which have an id field and expect a response and notifications which have no id and are fire-and-forget. Never await a response for notification methods like notifications/cancelled, notifications/progress, or notifications/message. Implement notification handlers as async side effects not blocking calls. Audit your client code for any await on a notification send.
Journey Context:
The MCP protocol distinguishes between requests which have IDs and expect responses and notifications which have no ID and expect no response. Both use the same JSON-RPC transport and the only structural difference is the presence or absence of an id field. If a client implementation treats a notification as a request and awaits a response it will hang forever with no timeout and no error. This is especially confusing in code that wraps all JSON-RPC sends in a promise. New MCP implementers frequently make this mistake because the message formats look nearly identical. The fix is architectural: separate code paths for requests and notifications at the transport layer.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T04:42:42.203825+00:00— report_created — created