{"repo":"NousResearch/hermes-agent","public_id":"31987","display_label":"MCP OAuth and HTTP transport reconnect deadlock fixes","summary":"These issues and fixes address deadlocks and reconnect failures in MCP OAuth-backed servers, specifically around stranded auth-flow generator locks and anyio cleanup errors during streamable HTTP transport teardown. Multiple fix attempts and salvage PRs suggest ongoing iteration on the same underlying concurrency problems.","subsystem":"mcp","counts":{"members":10,"open_issues":1,"open_issues_distinct":1,"open_prs":1,"closed_issues":2,"merged_prs":1,"attempt_prs":6},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":97458,"merged_at":"2026-08-29T03:16:27+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-29T03:16:27+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.17155555555555557},"fix_edges":[{"issue_number":38193,"pr_number":97458,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T03:16:27+00:00"}],"members":[{"kind":"issue","number":31987,"title":"MCP HTTP transport: anyio RuntimeError during streamable_http_client cleanup causes reconnect failure loop","url":null,"state":"open"},{"kind":"issue","number":38193,"title":"[Bug]: OAuth-backed MCP server permanently deadlocks after keepalive reconnect: auth-flow generator's lock is released cross-task.","url":null,"state":"closed"},{"kind":"issue","number":49543,"title":"OAuth MCP servers (e.g. Honeycomb) drop from active toolset mid-session — RuntimeError: The current task is not holding this lock + 120s call hangs","url":null,"state":"closed"},{"kind":"pr","number":32111,"title":"fix(tools): ignore anyio cleanup artifact during MCP HTTP reconnect","url":null,"state":"closed","close_reason":{"category":"stale_abandoned","implication":"active"},"merged":false},{"kind":"pr","number":38198,"title":"fix: Close inner SDK auth generator to prevent OAuth reconnect deadlock","url":null,"state":"open","close_reason":{"refs":[{"kind":"pr","value":"#63495","number":63495}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":63495,"title":"fix(mcp-oauth): close inner SDK auth generator on teardown (salvage #38198)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#97458","number":97458},{"kind":"pr","value":"#90888","number":90888}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":76526,"title":"fix: close stranded MCP OAuth auth flows","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#97458","number":97458},{"kind":"pr","value":"#91049","number":91049}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":90888,"title":"fix(mcp-oauth): bind delegated auth-flow teardown to the owning task","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"7c6f5ce3b717ccbb4b867bbb66855fdc8ab5dd9b","number":0},{"kind":"commit","value":"b2c4f1f376167e7e34a88c3dbd544e1fdc848c14","number":0},{"kind":"pr","value":"#38193","number":38193},{"kind":"pr","value":"#84963","number":84963},{"kind":"pr","value":"#88875","number":88875}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":91049,"title":"fix(mcp-oauth): recover stranded auth-flow locks","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#97458","number":97458}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":97458,"title":"fix(mcp-oauth): avoid locking across resource requests","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_mcp_oauth_bidirectional.py","tests/tools/test_mcp_oauth_manager.py","tools/mcp_oauth_manager.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}