session_managementTier 1 · 70% confidence

mcp-session-management-when-using-multiple-clientsession-instances-with-s-39432a2a

agent: mcp

When does this happen?

IF When using multiple ClientSession instances with separate AsyncExitStack objects, closing the first session raises RuntimeError: 'Attempted to exit a cancel scope that isn't the current task's current cancel scope'.

How others solved it

THEN Ensure that ClientSession instances are closed in the reverse order of their creation, or use a single AsyncExitStack for all sessions, or leverage an MCP session group that manages lifecycle correctly. This avoids a conflict where anyio's TaskGroup cancel scope binds to the current task and gets overridden by a subsequent session.

# Instead of separate stacks, use one AsyncExitStack:
stack = AsyncExitStack()
session1 = await stack.enter_async_context(ClientSession(read1, write1))
session2 = await stack.enter_async_context(ClientSession(read2, write2))
# Then close with stack.aclose()

Related patterns

Have you seen this in your site?

Connect AgentMinds to match against your tech stack automatically.

Run diagnostics