Notion MCP tools stuck loading in Cursor 2.2.43 (OAuth completes but 0 tools; fetch failed / No server info found)

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Notion MCP is broken in Cursor 2.2.43 on macOS: after I click Connect and complete the OAuth flow, Cursor never loads any Notion MCP tools/resources (stuck “loading tools” / shows 0). Logs show repeated “Saving tokens” after OAuth completes plus transport errors (“fetch failed”) and occasional “No server info found” while trying to list offerings.

Steps to Reproduce

  1. Open Cursor 2.2.43 on macOS (Apple Silicon).
  2. Open MCP settings and click Connect on the Notion MCP server (https://mcp.notion.com/mcp).
  3. Complete the OAuth flow in the browser and return to Cursor.
  4. Observe that Notion MCP stays “loading tools” / tools never appear (0 tools/resources).

Expected Behavior

After completing OAuth, Notion MCP should load and expose its tools/resources in Cursor.

Operating System

MacOS

Current Cursor Version (Menu → About Cursor → Copy)

Version: 2.2.43
VSCode Version: 1.105.1
Commit: 32cfbe848b35d9eb320980195985450f244b3030
Date: 2025-12-19T06:06:44.644Z
Electron: 37.7.0
Chromium: 138.0.7204.251
Node.js: 22.20.0
V8: 13.8.258.32-electron.0
OS: Darwin arm64 25.2.0

For AI issues: which model did you use?

N/A (not model-specific; MCP integration issue before any AI/model usage)

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

1 Like

One observation for why I believe this is related to Cursor, not Notion: Notion MCP still works fine for me with vscode/copilot.

Hey, thanks for the report. I’ll pass it to the team.

I am also having the same issue tried on multiple different computers Windows and Mac.

Seems likely the problem is Notion-related because I’m getting the same problem with Claude (mobile and web and desktop)

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

i can’t connect with notion mcp . these are the logs : 2025-12-21 14:40:01.374 [info] Handling ListOfferings action, server stored: false
2025-12-21 14:40:01.375 [error] No server info found
2025-12-21 14:40:05.990 [info] Handling CreateClient action
2025-12-21 14:40:05.991 [info] Creating streamableHttp transport
2025-12-21 14:40:05.991 [info] Connecting to streamableHttp server
2025-12-21 14:40:05.993 [info] Handling CreateClient action
2025-12-21 14:40:05.993 [info] Creating streamableHttp transport
2025-12-21 14:40:05.993 [info] Connecting to streamableHttp server
2025-12-21 14:40:05.996 [info] Handling CreateClient action
2025-12-21 14:40:05.996 [info] Creating streamableHttp transport
2025-12-21 14:40:05.998 [info] Connecting to streamableHttp server
2025-12-21 14:40:07.074 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:07.093 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:07.093 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:07.787 [info] Invalidating credentials: tokens
2025-12-21 14:40:07.787 [info] Invalidating credentials: tokens
2025-12-21 14:40:07.811 [info] Invalidating credentials: tokens
2025-12-21 14:40:08.189 [info] No stored tokens found
2025-12-21 14:40:08.190 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:08.190 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:08.191 [info] Saving PKCE code verifier {“verifierLen”:43}
2025-12-21 14:40:08.200 [info] Redirect to authorization requested {“url”:“Notion”}
2025-12-21 14:40:08.201 [info] No stored tokens found
2025-12-21 14:40:08.203 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:08.203 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:08.203 [info] Stored server URL for OAuth flow
2025-12-21 14:40:08.203 [info] OAuth provider needs auth callback during connection
2025-12-21 14:40:08.204 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 14:40:08.204 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 14:40:08.204 [info] Successfully connected to streamableHttp server
2025-12-21 14:40:08.204 [info] Storing streamableHttp client
2025-12-21 14:40:08.204 [info] CreateClient completed, server stored: true
2025-12-21 14:40:08.205 [info] Saving PKCE code verifier {“verifierLen”:43}
2025-12-21 14:40:08.219 [info] Redirect to authorization requested {“url”:“Notion”}
2025-12-21 14:40:08.248 [info] Stored server URL for OAuth flow
2025-12-21 14:40:08.248 [info] OAuth provider needs auth callback during connection
2025-12-21 14:40:08.248 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 14:40:08.248 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 14:40:08.248 [info] Successfully connected to streamableHttp server
2025-12-21 14:40:08.248 [info] A second client was created while connecting, discarding it.
2025-12-21 14:40:08.249 [info] CreateClient completed, server stored: true
2025-12-21 14:40:08.263 [info] No stored tokens found
2025-12-21 14:40:08.264 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:08.264 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:08.264 [info] Saving PKCE code verifier {“verifierLen”:43}
2025-12-21 14:40:08.276 [info] Redirect to authorization requested {“url”:“Notion”}
2025-12-21 14:40:08.288 [info] Stored server URL for OAuth flow
2025-12-21 14:40:08.288 [info] OAuth provider needs auth callback during connection
2025-12-21 14:40:08.289 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 14:40:08.289 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 14:40:08.289 [info] Successfully connected to streamableHttp server
2025-12-21 14:40:08.289 [info] A second client was created while connecting, discarding it.
2025-12-21 14:40:08.289 [info] CreateClient completed, server stored: true
2025-12-21 14:40:08.644 [info] Handling ListOfferings action, server stored: true
2025-12-21 14:40:08.644 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 14:40:08.645 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 14:40:12.536 [info] Handling LogoutServer action
2025-12-21 14:40:12.537 [info] Clearing stored OAuth data
2025-12-21 14:40:12.561 [info] Successfully cleared OAuth tokens
2025-12-21 14:40:12.561 [info] Cleaning up
2025-12-21 14:40:12.566 [info] Handling ReloadClient action
2025-12-21 14:40:12.566 [info] Creating streamableHttp transport
2025-12-21 14:40:12.566 [info] Connecting to streamableHttp server
2025-12-21 14:40:12.568 [info] No stored tokens found
2025-12-21 14:40:13.112 [info] No stored client information found
2025-12-21 14:40:13.114 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:13.314 [info] Saving client information {“redirects”:1,“clientIdPresent”:true}
2025-12-21 14:40:13.317 [info] No stored tokens found
2025-12-21 14:40:13.317 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:13.318 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:13.318 [info] Saving PKCE code verifier {“verifierLen”:43}
2025-12-21 14:40:13.323 [info] Redirect to authorization requested {“url”:“Notion”}
2025-12-21 14:40:13.334 [info] Stored server URL for OAuth flow
2025-12-21 14:40:13.334 [info] OAuth provider needs auth callback during connection
2025-12-21 14:40:13.335 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 14:40:13.335 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 14:40:13.335 [info] Successfully connected to streamableHttp server
2025-12-21 14:40:13.335 [info] Storing streamableHttp client
2025-12-21 14:40:13.335 [info] Successfully reloaded client
2025-12-21 14:40:13.785 [info] Handling ListOfferings action, server stored: true
2025-12-21 14:40:13.785 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 14:40:13.785 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 14:40:20.841 [info] Received OAuth callback with code
2025-12-21 14:40:21.265 [info] Using redirect URL {“url”:“cursor://anysphere.cursor-mcp/oauth/callback”}
2025-12-21 14:40:21.557 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:21.560 [info] OAuth authorization completed
2025-12-21 14:40:21.563 [info] Handling ReloadClient action
2025-12-21 14:40:21.563 [info] Cleaning up
2025-12-21 14:40:21.564 [info] Creating streamableHttp transport
2025-12-21 14:40:21.564 [info] Connecting to streamableHttp server
2025-12-21 14:40:22.428 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:23.295 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:24.114 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:24.994 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:25.818 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:26.625 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:27.440 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:28.272 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:29.105 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:29.999 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:30.824 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:31.658 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:32.517 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:33.384 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:34.663 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:35.480 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:36.301 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:37.122 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:37.943 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:38.756 [info] Handling ListOfferings action, server stored: false
2025-12-21 14:40:38.756 [error] No server info found
2025-12-21 14:40:38.805 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:39.637 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:40.478 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:41.346 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:42.753 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:43.582 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:44.439 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:45.247 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:46.127 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:46.943 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:47.836 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:48.658 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:49.486 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:50.355 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:51.202 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:52.058 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:52.911 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:53.742 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:54.566 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:55.434 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:56.280 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:57.136 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:57.954 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:58.761 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:40:59.614 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:00.459 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:01.355 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:02.356 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:03.252 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:04.127 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:05.000 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:05.872 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:06.670 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:07.582 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:08.420 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:09.308 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:10.139 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:10.966 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:11.778 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:12.652 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:13.472 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:14.296 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:15.126 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:15.977 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:16.804 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:17.996 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:18.863 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:19.771 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:20.636 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:21.491 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:21.571 [info] Client closed for command
2025-12-21 14:41:21.572 [error] Error connecting to streamableHttp server, falling back to SSE: MCP error -32001: Request timed out
2025-12-21 14:41:21.572 [error] Error connecting to streamableHttp server, falling back to SSE: MCP error -32001: Request timed out
2025-12-21 14:41:21.572 [info] Connecting to SSE server
2025-12-21 14:41:21.573 [error] Client error for command This operation was aborted
2025-12-21 14:41:21.583 [error] Client error for command This operation was aborted
2025-12-21 14:41:21.583 [error] Client error for command Failed to send cancellation: AbortError: This operation was aborted
2025-12-21 14:41:21.965 [info] Handling ListOfferings action, server stored: false
2025-12-21 14:41:21.965 [error] No server info found
2025-12-21 14:41:22.464 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:23.323 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:24.145 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:24.980 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:25.819 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:26.638 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:27.458 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:28.268 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:28.891 [info] Handling DeleteClient action
2025-12-21 14:41:29.121 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:29.921 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:30.764 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:31.579 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:32.409 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:33.279 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:34.117 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:34.951 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:35.808 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:36.648 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:37.486 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:38.310 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:39.157 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:39.975 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:40.872 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:41.702 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:42.572 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:43.384 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:44.225 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:45.083 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:45.934 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:46.778 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:47.608 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:48.443 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:49.248 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:50.065 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:50.886 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:51.709 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:52.560 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:53.405 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:54.261 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:55.063 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:55.908 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:56.753 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:57.624 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:58.437 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:41:59.280 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:00.104 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:01.317 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:02.148 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:02.944 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:03.781 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:04.615 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:05.451 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:06.283 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:07.118 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:07.990 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:08.855 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}
2025-12-21 14:42:09.687 [info] Saving tokens {“accessTokenLen”:86,“refreshPresent”:true,“expiresIn”:3600}

Steps to Reproduce

when i click “connect” to autenticate my notion , it opens notion, i click on my profile, i click continue, then i click on continue and then i wait and i see the logs and it doesn’t connect.

Expected Behavior

i can’t connect with notion via mcp

Operating System

Windows 10/11

Current Cursor Version (Menu → About Cursor → Copy)

Version: 2.2.43 (user setup)
VSCode Version: 1.105.1
Commit: 32cfbe848b35d9eb320980195985450f244b3030
Date: 2025-12-19T06:06:44.644Z
Electron: 37.7.0
Chromium: 138.0.7204.251
Node.js: 22.20.0
V8: 13.8.258.32-electron.0
OS: Windows_NT x64 10.0.26200

Does this stop you from using Cursor

No - Cursor works, but with this issue

2 Likes

Link to related Notion issue:

2 Likes

Where does the bug appear (feature/product)?

macOS 15.6.1
Cursor IDE (2.2.43)

Describe the Bug

Can’t connect to Notion MCP from Cursor IDE, it keeps getting stuck in “Loading tools…” or “Needs authentication”.

Full output

2025-12-21 10:30:59.774 [info] Handling CreateClient action
2025-12-21 10:30:59.774 [info] Creating streamableHttp transport
2025-12-21 10:30:59.774 [info] Connecting to streamableHttp server
2025-12-21 10:30:59.777 [info] No stored tokens found
2025-12-21 10:31:00.180 [info] No stored client information found
2025-12-21 10:31:00.183 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:31:00.541 [info] Saving client information {"redirects":1,"clientIdPresent":true}
2025-12-21 10:31:00.551 [info] No stored tokens found
2025-12-21 10:31:00.551 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:31:00.551 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:31:00.553 [info] Saving PKCE code verifier {"verifierLen":43}
2025-12-21 10:31:00.555 [info] Redirect to authorization requested {"url":"https://mcp.notion.com/authorize?response_type=code&client_id=qQ-IXVfcn4_uNpHO&code_challenge=DWpGSKF4IC0nz4451zec2g7MlX0fa8KC6ouvEL74X_Q&code_challenge_method=S256&redirect_uri=cursor%3A%2F%2Fanysphere.cursor-mcp%2Foauth%2Fcallback&state=eyJpZCI6InVzZXItTm90aW9uIn0&resource=https%3A%2F%2Fmcp.notion.com%2F"}
2025-12-21 10:31:00.560 [info] Stored server URL for OAuth flow
2025-12-21 10:31:00.560 [info] OAuth provider needs auth callback during connection
2025-12-21 10:31:00.561 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 10:31:00.561 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 10:31:00.561 [info] Successfully connected to streamableHttp server
2025-12-21 10:31:00.561 [info] Storing streamableHttp client
2025-12-21 10:31:00.561 [info] CreateClient completed, server stored: true
2025-12-21 10:31:59.887 [info] Handling ListOfferings action, server stored: true
2025-12-21 10:31:59.887 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 10:31:59.888 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 10:33:08.768 [info] Handling ListOfferings action, server stored: true
2025-12-21 10:33:08.768 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 10:33:08.768 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 10:35:31.677 [info] Handling LogoutServer action
2025-12-21 10:35:31.677 [info] Clearing stored OAuth data
2025-12-21 10:35:31.689 [info] Successfully cleared OAuth tokens
2025-12-21 10:35:31.689 [info] Cleaning up
2025-12-21 10:35:31.701 [info] Handling ReloadClient action
2025-12-21 10:35:31.701 [info] Creating streamableHttp transport
2025-12-21 10:35:31.701 [info] Connecting to streamableHttp server
2025-12-21 10:35:31.710 [info] No stored tokens found
2025-12-21 10:35:32.615 [info] No stored client information found
2025-12-21 10:35:32.619 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:35:32.630 [info] Handling ListOfferings action, server stored: false
2025-12-21 10:35:32.630 [error] No server info found
2025-12-21 10:35:33.015 [info] Saving client information {"redirects":1,"clientIdPresent":true}
2025-12-21 10:35:33.025 [info] No stored tokens found
2025-12-21 10:35:33.026 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:35:33.026 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:35:33.026 [info] Saving PKCE code verifier {"verifierLen":43}
2025-12-21 10:35:33.028 [info] Redirect to authorization requested {"url":"https://mcp.notion.com/authorize?response_type=code&client_id=ZG36CpUcUP4eO5TS&code_challenge=1m7CKpMKnOO79zrN5qN_TJMKm6l2DS8sl8F6VDjwi9k&code_challenge_method=S256&redirect_uri=cursor%3A%2F%2Fanysphere.cursor-mcp%2Foauth%2Fcallback&state=eyJpZCI6InVzZXItTm90aW9uIn0&resource=https%3A%2F%2Fmcp.notion.com%2F"}
2025-12-21 10:35:33.030 [info] Stored server URL for OAuth flow
2025-12-21 10:35:33.030 [info] OAuth provider needs auth callback during connection
2025-12-21 10:35:33.030 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 10:35:33.030 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 10:35:33.030 [info] Successfully connected to streamableHttp server
2025-12-21 10:35:33.030 [info] Storing streamableHttp client
2025-12-21 10:35:33.031 [info] Successfully reloaded client
2025-12-21 10:35:33.346 [info] Handling ListOfferings action, server stored: true
2025-12-21 10:35:33.346 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 10:35:33.346 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 10:35:46.716 [info] Received OAuth callback with code
2025-12-21 10:35:47.054 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:35:47.533 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:47.536 [info] OAuth authorization completed
2025-12-21 10:35:47.544 [info] Handling ReloadClient action
2025-12-21 10:35:47.544 [info] Cleaning up
2025-12-21 10:35:47.544 [info] Creating streamableHttp transport
2025-12-21 10:35:47.544 [info] Connecting to streamableHttp server
2025-12-21 10:35:48.439 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:49.633 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:51.735 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:53.072 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:54.391 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:56.087 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:57.312 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:35:58.826 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:00.166 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:01.150 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:02.089 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:02.956 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:04.001 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:05.482 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:06.826 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:07.857 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:09.254 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:10.529 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:12.060 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:13.280 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:14.717 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:16.183 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:17.419 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:18.819 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:19.789 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:21.524 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:23.048 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:24.605 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:26.101 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:27.521 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:29.311 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:30.823 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:31.953 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:32.899 [info] Saving tokens {"accessTokenLen":86,"refreshPresent":true,"expiresIn":3600}
2025-12-21 10:36:33.441 [info] Invalidating credentials: tokens
2025-12-21 10:36:33.761 [info] No stored tokens found
2025-12-21 10:36:33.763 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:36:33.763 [info] Using redirect URL {"url":"cursor://anysphere.cursor-mcp/oauth/callback"}
2025-12-21 10:36:33.764 [info] Saving PKCE code verifier {"verifierLen":43}
2025-12-21 10:36:33.771 [info] Redirect to authorization requested {"url":"https://mcp.notion.com/authorize?response_type=code&client_id=ZG36CpUcUP4eO5TS&code_challenge=9aVW5YcWc1CCsMfC8W6iEQc4b_hVXXFz_9q48qGBlUI&code_challenge_method=S256&redirect_uri=cursor%3A%2F%2Fanysphere.cursor-mcp%2Foauth%2Fcallback&state=eyJpZCI6InVzZXItTm90aW9uIn0&resource=https%3A%2F%2Fmcp.notion.com%2F"}
2025-12-21 10:36:33.775 [info] Stored server URL for OAuth flow
2025-12-21 10:36:33.775 [info] OAuth provider needs auth callback during connection
2025-12-21 10:36:33.775 [error] Error connecting to streamableHttp server, falling back to SSE: Unauthorized
2025-12-21 10:36:33.775 [warning] Unauthorized error connecting to streamableHttp server, returning transport
2025-12-21 10:36:33.775 [info] Successfully connected to streamableHttp server
2025-12-21 10:36:33.775 [info] Storing streamableHttp client
2025-12-21 10:36:33.775 [info] Successfully reloaded client
2025-12-21 10:36:34.198 [info] Handling ListOfferings action, server stored: true
2025-12-21 10:36:34.198 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 10:36:34.198 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 10:38:08.686 [info] Handling ListOfferings action, server stored: true
2025-12-21 10:38:08.686 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 10:38:08.686 [info] Found 0 tools, 0 prompts, and 0 resources
2025-12-21 10:43:08.307 [info] Handling ListOfferings action, server stored: true
2025-12-21 10:43:08.307 [info] Connected to streamableHttp server, fetching offerings
2025-12-21 10:43:08.307 [info] Found 0 tools, 0 prompts, and 0 resources

Steps to Reproduce

  • Notion: Settings → Connections → Notion MCP → Cursor → Connect

  • Cursor: Click “Install”

  • Notion: OAuth Authorize

  • Cursor: Notion - “Needs authentication”

  • Cursor: Click “Connect”

  • Notion: Connection prompt - Click “Continue”

  • Cursor: For sometime (up to 1 min) keeps printing the “Saving tokens…” and the UI says “Loading tools…”

  • Cursor: Reverts back to “Needs authentication”

ok, now i can connect with the notion mcp

I am good too, now.

It started working for me too

This is actually caused by a whole swathe of Cursor bugs, which I’m told are being worked on.

Here’s a list of some:

This topic was automatically closed 22 days after the last reply. New replies are no longer allowed.