langchain-ai/deepagents · error · RuntimeError
Cannot create an MCP session after cleanup
Error message
Cannot create an MCP session after cleanup
What it means
_create_entry (invoked lazily by get_session) raises RuntimeError if the manager was closed, since no new sessions can be created after cleanup.
Source
Thrown at libs/code/deepagents_code/mcp_tools.py:779
self._locks[server_name] = lock
return lock
async def _create_entry(self, server_name: str) -> _MCPSessionEntry:
"""Create and initialize a new cached session entry.
Args:
server_name: MCP server name.
Returns:
A cached session entry containing the live session and close stack.
Raises:
RuntimeError: If the manager has already been cleaned up.
ValueError: If `server_name` is not configured in the manager.
"""
if self._closed:
msg = "Cannot create an MCP session after cleanup"
raise RuntimeError(msg)
try:
connection = self._connections[server_name]
except KeyError as exc:
msg = (
f"Couldn't find an MCP server named '{server_name}', "
f"expected one of {sorted(self._connections)}"
)
raise ValueError(msg) from exc
exit_stack = AsyncExitStack()
try:
session = await exit_stack.enter_async_context(
_create_mcp_session(connection, server_name=server_name)
)
await session.initialize()
except BaseException:
# Close the partially entered stack in *this* task beforeView on GitHub (pinned to a1af029e6e)
Solutions
- Recreate the manager and reconfigure it before calling get_session
- Ensure all get_session calls complete before close()
- Guard get_session behind a manager-open check
Example fix
// before
await manager.close()
await manager.get_session('fs') # raises
// after
await manager.close()
manager = MCPSessionManager()
await manager.configure(connections)
await manager.get_session('fs') Defensive patterns
Strategy: try-catch
Try / catch
try:
session = await manager.get_session(server)
except RuntimeError as e:
if 'after cleanup' in str(e):
manager = MCPSessionManager()
await manager.configure(connections)
session = await manager.get_session(server)
else:
raise Prevention
- Cancel background tasks before closing the manager
- Use an async context manager (async with) so use and cleanup are scoped
- Do not retain manager references past shutdown
When it happens
Trigger: Calling get_session(server_name) after close()/cleanup; holding a manager reference past app shutdown and reusing it.
Common situations: Background tasks or request handlers still using a manager that a shutdown hook already closed; tests tearing down fixtures while coroutines are pending.
Related errors
- Cannot configure a closed MCP session manager
- Server process is not running
- A workspace is required to start the remote agent.
- mcp.disabled_servers is missing from the config manifest
- Cannot reconfigure MCP session manager after sessions are ac
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/39f164ee720a7530.
Report an issue: GitHub.