Cursor doesn't send MCP cancellation notifications when user clicks cancel button

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

When clicking the cancel button during MCP tool execution, Cursor does not send the required notifications/cancelled message to the MCP server, causing tools to continue running in the background.

Steps to Reproduce

  1. Create an MCP server with a long-running tool (e.g., an agent that takes 30+ seconds)
  2. Configure the MCP server in Cursor’s mcp.json
  3. Trigger the tool from Cursor chat
  4. Click the Cancel button in the Tool Execution UI
  5. Observe that the tool continues running on the server side

Expected Behavior

According to the MCP specification, when the user clicks cancel:

  1. Cursor should send a notifications/cancelled notification:
    {
      "jsonrpc": "2.0",
      "method": "notifications/cancelled",
      "params": {
        "requestId": "123",
        "reason": "User requested cancellation"
      }
    }
    
  2. The MCP SDK automatically calls abort() on the stored AbortController
  3. The server receives the abort signal via extra.signal
  4. The tool stops processing and cleans up resources

Actual Behavior

  • User clicks cancel button
  • No notification is sent to the MCP server
  • Tool continues running in background
  • No cleanup occurs
  • Resources remain allocated

Evidence from Server Logs

When running an MCP server with debug logging:

[Tool invoked] signal: present, already aborted: false
[Abort listener registered] for request ID abc-123
[User clicks cancel in Cursor]
(No abort event fires - execution continues until completion)

The extra.signal is provided by the MCP SDK, but since Cursor never sends the cancellation notification, the signal never gets aborted.

Technical Verification

I verified this is a Cursor client issue, not an MCP SDK issue:

  1. MCP TypeScript SDK correctly implements cancellation:

Related Reports

Additional Notes

This appears to be a missing feature in Cursor’s MCP client implementation. The cancel button exists in the UI, but it doesn’t properly communicate the cancellation to the MCP server according to the protocol.

Workaround: None available. Tools must complete or timeout naturally.

Request: Please implement proper notifications/cancelled support so MCP tools can be stopped when users click the cancel button.

Operating System

MacOS

Current Cursor Version (Menu → About Cursor → Copy)

  • Cursor Version: 1.7.54 (Universal)
  • VSCode Version: 1.99.3
  • Commit: 5c17eb2968a37f66bc6662f48d6356a100b67be0
  • Date: 2025-10-21T19:07:38.476Z
  • Electron: 34.5.8
  • Platform: macOS (Darwin arm64 25.0.0)
  • MCP SDK: @modelcontextprotocol/sdk@^1.20.1

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hey, thanks for the report. Everything is clearly documented with an excellent technical breakdown and links to the MCP specification.

I’ll pass this to the team as a gap in the protocol implementation. The lack of notifications/cancellation support prevents proper resource cleanup for long-running MCP tools.

Unfortunately, there’s no workaround right now, tools need to finish or naturally expire by timeout, as you noted.

seems like it is fixed in v2. thanks!