modelcontextprotocol / modelcontextprotocol/python-sdk

Improve log clarity for "Terminating session: None" in stateless mode

Open
#2,329 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement P3
Dominant language
Python
Stars
24.3k
Forks
4k
Avg merge
1d 1h
Merged PRs (30d)
31

Description

Description

In stateless HTTP mode, every request logs INFO:mcp.server.streamable_http:Terminating session: None. This is correct behavior — stateless mode creates a new transport with mcp_session_id=None per request and terminates it afterward — but the message is confusing to end users who see it and assume their connection is failing or being dropped.

I maintain an MCP server (ha-mcp) that runs in stateless mode, and this log message regularly causes confusion among users who think they aren't connected.

Suggested change

Differentiate the log message for stateless (session-less) terminations:

# Current (streamable_http.py):
logger.info(f"Terminating session: {self.mcp_session_id}")

# Suggested:
if self.mcp_session_id:
    logger.info(f"Terminating session: {self.mcp_session_id}")
else:
    logger.debug("Stateless request completed, cleaning up transport")

This would:

  • Downgrade stateless cleanup to DEBUG (routine, not noteworthy)
  • Use wording that doesn't alarm users ("completed" vs "Terminating")
  • Keep the existing INFO-level log for actual session terminations
References

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the terminate() method in src/mcp/server/streamable_http.py, then compare it with _handle_stateless_request() in src/mcp/server/streamable_http_manager.py. Confirm that stateless cleanup is distinguished from session termination and that actual session terminations retain their existing log behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, observability
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.