Context
When using a single Cursor instance with multiple chat tabs, all MCP requests share the same session_id generated at app launch. As a result, the backend cannot differentiate which chat tab initiated a particular request, even though each tab maintains separate conversation context and history.
Problem
- All chat tabs share one MCP session_id, making it impossible for tools or custom backend services to identify which tab sent a request.
- This limitation hinders backend features like per-tab analytics, routing, or isolation of tool calls, especially when running parallel workflows across tabs.
Proposed Feature
Please enhance Cursor to generate a unique window_id for each chat tab and include it in MCP requests. This could be done via:
- Adding a
"window_id"field in the JSON payload sent over stdio/SSE. - Or including it in a header (e.g.
Mcp-Window-Id: <uuid>) in HTTP mode.
Benefits
- Parallel tab support: Backend services can map requests to tabs, enabling multi-window workflows.
- Analytics & monitoring: Track usage and performance per chat tab.
- Better tool routing: MCP servers can make tab-specific routing or caching decisions.
- Plugin and extension readiness: Plugins can operate correctly in separate tabs without cross-talk.
Related discussions
- Persist selected model per chat tab — suggests more context isolation per tab
- Cursor needs awareness of the UI — argues for deeper integration between Cursor’s UI and backend agents
Example usage
{
"session_id": "abc123",
"window_id": "550e8400-e29b-41d4-a716-446655440000",
"payload": { ... }
}