Background & Current State
Recently, the MCP core maintainers made the decision to remove "Sessions" from the protocol.
Historically, sessions were included in the protocol but suffered from significant ambiguity and implementation complexities. After reviewing the trade-offs between stateful and sessionless architectures, the decision was made to move to a sessionless baseline.
You can read the full context of this decision here:
Pushback
Since the decision, we've received pushback from the community highlighting scenarios where maintaining state across a series of interactions feels necessary. There is an active debate, including alternative proposals to retain or rework this functionality (see PR #2822).
We are opening this issue to formally collect concrete use cases for "sessions", and to discuss what a path forward might look like.
Experimental Extension
Before bringing sessions back into the core protocol, we are considering introducing it as an experimental extension. However, to do this successfully, we need to resolve the core challenges that caused us to remove sessions in the first place.
If we reintroduce this concept, we also need to move away from the term "Sessions." The word is heavily overloaded across different networking and application layers. Moving forward, we are proposing terms like Conversation IDs or Thread IDs to more accurately reflect their purpose: grouping a logical sequence of MCP requests.
Challenges
For any Thread ID / Conversation ID proposal to succeed, we need to clearly define its scope. Previous implementations struggled because the boundaries were too blurry. We need to answer:
- Lifecycle Management:
- When exactly does a Thread ID start and stop?
- Is the lifecycle explicitly managed by the client (e.g., an initialization call), or implicitly created on the first tool call?
- How do we handle cleanup and timeouts for abandoned threads?
- Scope of Impact:
- What protocol capabilities should a Thread ID be allowed to mutate?
- Does a Thread ID only provide context to
tools/call execution?
- Or should a Thread ID be allowed to dynamically alter the results of
tools/list, resources/list, and prompts/list based on the conversation's state? (Allowing this previously caused massive caching and synchronization headaches).
Call for Use Cases
To design this right, we need to know exactly how you were using (or planning to use) sessions.
Please reply below with your use cases. When doing so, try to answer:
- What is the exact workflow you are trying to achieve?
- Why can't this be solved by passing state/context directly into the tool call parameters?
- Do you need the Thread ID to change the available tools/resources, or just the execution context of a specific tool?
Looking forward to the community's input.
Background & Current State
Recently, the MCP core maintainers made the decision to remove "Sessions" from the protocol.
Historically, sessions were included in the protocol but suffered from significant ambiguity and implementation complexities. After reviewing the trade-offs between stateful and sessionless architectures, the decision was made to move to a sessionless baseline.
You can read the full context of this decision here:
Pushback
Since the decision, we've received pushback from the community highlighting scenarios where maintaining state across a series of interactions feels necessary. There is an active debate, including alternative proposals to retain or rework this functionality (see PR #2822).
We are opening this issue to formally collect concrete use cases for "sessions", and to discuss what a path forward might look like.
Experimental Extension
Before bringing sessions back into the core protocol, we are considering introducing it as an experimental extension. However, to do this successfully, we need to resolve the core challenges that caused us to remove sessions in the first place.
If we reintroduce this concept, we also need to move away from the term "Sessions." The word is heavily overloaded across different networking and application layers. Moving forward, we are proposing terms like Conversation IDs or Thread IDs to more accurately reflect their purpose: grouping a logical sequence of MCP requests.
Challenges
For any Thread ID / Conversation ID proposal to succeed, we need to clearly define its scope. Previous implementations struggled because the boundaries were too blurry. We need to answer:
tools/callexecution?tools/list,resources/list, andprompts/listbased on the conversation's state? (Allowing this previously caused massive caching and synchronization headaches).Call for Use Cases
To design this right, we need to know exactly how you were using (or planning to use) sessions.
Please reply below with your use cases. When doing so, try to answer:
Looking forward to the community's input.