Browser MCP Tools Not Available

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Hi

I’m experiencing an issue where the @Browser MCP tools are not accessible to the AI assistant in Cursor. According to the MCP instructions, I should have access to browser tools from cursor-browser-extension and cursor-ide-browser servers, but these tools are not appearing in the available tools list.

When the assistant attempts to use browser functionality:

  1. list_mcp_resources() returns empty: When querying for browser MCP resources, the tool returns “No MCP resources found” for both cursor-browser-extension and cursor-ide-browser servers.

  2. No browser tools in available tools: The assistant’s available tools list does not include any browser-related tools (no browser_navigate, browser_open, browser_click, etc.).

  3. Cannot perform browser operations: The assistant cannot navigate to URLs or interact with web pages through MCP, even when explicitly requested

  4. Expected MCP Servers:

    cursor-browser-extension

    cursor-ide-browser

I precise I’ve al verified that I already activate the browser automation, and “show localhost links in browser”,i tested to explicitly call @browser but same problem

Steps to Reproduce

  1. Request the assistant to open a URL using the browser (e.g., “use the browser tab to open google”)
  2. The assistant attempts to use list_mcp_resources for browser servers
  3. Result: “No MCP resources found”
  4. The assistant cannot access any browser tools

What I’ve Tried

  • Called list_mcp_resources() without server filter - no resources found
  • Called list_mcp_resources(server="cursor-browser-extension") - no resources found
  • Called list_mcp_resources(server="cursor-ide-browser") - no resources found
  • Searched the codebase for MCP configuration - no relevant configuration found

also tried with differents models, switch agent to chat, plan etc etc.

Expected Behavior

just browser functionnality work

Operating System

Windows 10/11

Current Cursor Version (Menu → About Cursor → Copy)

Version: 2.3.30 (system setup)
VSCode Version: 1.105.1
Commit: d1289018cc3fcc395487f65455e31651734308d0
Date: 2026-01-08T05:21:38.211Z
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.26100

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

4 Likes

Hey, thanks for the report.

This is a known issue, a regression in versions 2.3.18+. The team is working on a fix. Browser automation should work through the built-in tools and it does NOT show up as a separate MCP server in Settings > MCP.

To help us fix this faster, can you share:

  • Help > Toggle Developer Tools > Console: any errors when you try to use the browser tools
  • The Request ID of the failed call (chat context menu > Copy Request ID)
  • What do you see in Settings > Tools & MCP > Browser Automation?

Related reports: Bug report with browser extension

Oh, so maybe how can i regrete my cursor version to a functional version ?

Request ID : “6acbc610-7639-4496-bfaf-d185facd4b95”

Yes i see Browser automation and it is activated.

Any ETA on a fix for this?

4 Likes

I’m absolutely furious! How can a critical feature like MCP have such a rookie bug? It’s like your team has no clue what testing is. This bug has been lingering since multiple versions ago and is still there in **2.3.41 (2026-01-16)**—unbelievable! You’d rather roll out new features than roll back this broken garbage? I just don’t get it!

VS Code once pushed an update that raised the libc version requirement, breaking the app for tons of old users. They fixed it the very next day, even though it was such a low-level dependency issue. But Cursor? You keep overhauling the UI and forcing your ugly agent layout down our throats, messing up our habits over and over again, while this MCP bug—where `list_mcp_resources()` returns nothing—remains unaddressed. Pathetic!

6 Likes

Yes it was working with an mcp server to access SQL now nada, I also filed a bug report. I have not found a way to go back to the update from a day or two ago. Is there a way.

This was working before the 2.3.41 update in the last few days (at least for the sql mcp servers).

1 Like

Same problem. I regret that I have updated. Any workaround?

2 Likes

What are you guys doing!!! Cursor is now unusable for me and my ultra subscribtion just renewed otherwise i would have cancled beforehand!!!

2 Likes

I recommend using Playwriter.dev MCP which is far better than the Browser (unless you really want the browser window and editing tools in the Cursor IDE).

Apparently it has a significantly reduced context window - you can read all about if if you really want

It attaches to an existing tab rather than a new browser incognito window so no faff if your app uses SSO

{

“mcpServers”: {

“playwriter”: {

“command”: “npx”,

“args”: [

“playwriter@latest”

],

“env”: {

“PLAYWRITER_AUTO_ENABLE”: “1”

}

}

}

}

1 Like

Had the same issue with Cursor 2.3.41

Just downgraded Cursor to 2.2.44 and it works again like before.

1 Like

for historical versions, there’s one repo in github.

and to disable auto update, search update.mode in user settings (VSCode settings)

Tried to fix xcodebuildmcp somehow for 3 hours. Downgrading to Cursor 2.2 helped. Agent mode just doesn’t see any mcp tools. Only mcp resources…

having same issues described here but just instaled playright mcp to stop headaches.
hope it gets fixed soon

I got this to work in the prior version by saving a workplace file. But I just upgraded and now this is not working AGAIN and saving the workplace file does no good. Cursor, you may want to invest in human coders and rely a little less on your buggy product.

My version is:

Version: 2.4.23 (Universal)
VSCode Version: 1.105.1
Commit: 379934e04d2b3290cf7aefa14560f942e4212920
Date: 2026-01-29T21:24:23.350Z
Build Type: Stable
Release Track: Default
Electron: 39.2.7
Chromium: 142.0.7444.235
Node.js: 22.21.1
V8: 14.2.231.21-electron.0
OS: Darwin arm64 25.2.0

Just installed which has broken the internal browser:

Version: 2.4.23 (Universal)
VSCode Version: 1.105.1
Commit: 379934e04d2b3290cf7aefa14560f942e4212920
Date: 2026-01-29T21:24:23.350Z
Build Type: Stable
Release Track: Default
Electron: 39.2.7
Chromium: 142.0.7444.235
Node.js: 22.21.1
V8: 14.2.231.21-electron.0
OS: Darwin arm64 25.2.0

Now, the config directories contain:

ls -al /Users/chris/.cursor/projects/Users-chris-Documents-Development-Tour-Editor-POC/mcps/*

/Users/chris/.cursor/projects/Users-chris-Documents-Development-Tour-Editor-POC/mcps/cursor-browser-extension:

total 16
drwxr-xr-x@ 4 chris staff 128 Jan 30 09:26 .
drwxr-xr-x@ 4 chris staff 128 Jan 30 09:26 ..
-rw-r–r–@ 1 chris staff 318 Jan 30 09:26 INSTRUCTIONS.md
-rw-r–r–@ 1 chris staff 96 Jan 30 09:26 SERVER_METADATA.json

/Users/chris/.cursor/projects/Users-chris-Documents-Development-Tour-Editor-POC/mcps/cursor-ide-browser:
total 16
drwxr-xr-x@ 4 chris staff 128 Jan 30 09:26 .
drwxr-xr-x@ 4 chris staff 128 Jan 30 09:26 ..
-rw-r–r–@ 1 chris staff 1931 Jan 30 09:26 INSTRUCTIONS.md
-rw-r–r–@ 1 chris staff 84 Jan 30 09:26 SERVER_METADATA.json

Developer console says this when I direct agent to debug in browser:

workbench.desktop.main.js:531 This document requires ‘TrustedScript’ assignment. The action has been blocked.
(anonymous) @ workbench.desktop.main.js:531
workbench.desktop.main.js:531 The JavaScript Function constructor does not accept TrustedString arguments. See Trusted Types for function constructor · w3c/trusted-types Wiki · GitHub for more information.
workbench.desktop.main.js:58 WARN Missing property “rpcFileLoggerFolder” in oldValue. Filling with value from initValue. Please add a migration if necessary.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘ms-toolsai.datawrangler’ wants API proposal ‘debugFocus’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘ms-vscode.vscode-copilot-data-analysis’ wants API proposal ‘chatVariableResolver’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘ms-python.python’ wants API proposal ‘terminalShellType’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘ms-python.vscode-python-envs’ wants API proposal ‘terminalShellType’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘github.copilot-chat’ wants API proposal ‘chatReadonlyPromptReference’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘ms-azuretools.vscode-azure-github-copilot’ wants API proposal ‘lmTools’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘vscjava.vscode-java-pack’ wants API proposal ‘lmTools’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘apidev.azure-api-center’ wants API proposal ‘chatParticipant’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN Via ‘product.json#extensionEnabledApiProposals’ extension ‘apidev.azure-api-center’ wants API proposal ‘languageModels’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 ERR Extension ‘openai.chatgpt’ wants API proposal ‘chatSessionsProvider’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
error @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 ERR Extension ‘openai.chatgpt’ wants API proposal ‘languageModelProxy’ but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check ‘vscode.d.ts’) or was abandoned.
error @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.autoImportCompletions’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.autoSearchPaths’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.stubPath’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.diagnosticMode’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.extraPaths’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.useLibraryCodeForTypes’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.typeCheckingMode’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.diagnosticSeverityOverrides’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.logLevel’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 WARN [ms-python.vscode-pylance]: Cannot register ‘python.analysis.typeshedPaths’. This property is already registered.
warn @ workbench.desktop.main.js:58
workbench.desktop.main.js:58 ERR [Extension Host] (node:11844) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead.
(Use Cursor Helper (Plugin) --trace-deprecation ... to show where the warning was created)
error @ workbench.desktop.main.js:58
workbench.desktop.main.js:11398 [Extension Host] (node:11844) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead.
(Use Cursor Helper (Plugin) --trace-deprecation ... to show where the warning was created)
qMf @ workbench.desktop.main.js:11398
workbench.desktop.main.js:34040 [transport] Connect error in unary AI connect ConnectError: [unauthenticated] You must be a team member to access this resource
at t (workbench.desktop.main.js:11431:34429)
at async Object.getTeamCommands (workbench.desktop.main.js:637:31933)
at async RLc.loadTeamCommands (workbench.desktop.main.js:36045:4584) Object
error @ workbench.desktop.main.js:34040
workbench.desktop.main.js:36045 Failed to load team commands: ConnectError: [unauthenticated] You must be a team member to access this resource
at t (workbench.desktop.main.js:11431:34429)
at async Object.getTeamCommands (workbench.desktop.main.js:637:31933)
at async RLc.loadTeamCommands (workbench.desktop.main.js:36045:4584)
loadTeamCommands @ workbench.desktop.main.js:36045
workbench.desktop.main.js:58 ERR [Extension Host] [otel.error] {“stack”:“OTLPExporterError: Bad Request\n\tat IncomingMessage. (/Applications/Cursor.app/Contents/Resources/app/node_modules/@opentelemetry/otlp-exporter-base/build/src/transport/http-transport-utils.js:52:31)\n\tat IncomingMessage.emit (node:events:531:35)\n\tat endReadableNT (node:internal/streams/readable:1698:12)\n\tat process.processTicksAndRejections (node:internal/process/task_queues:90:21)”,“message”:“Bad Request”,“code”:“400”,“name”:“OTLPExporterError”,“data”:“{“error”:“Trace spans collection is not enabled for this user”}”}
error @ workbench.desktop.main.js:58
error @ workbench.desktop.main.js:58
error @ workbench.desktop.main.js:35991
WMf @ workbench.desktop.main.js:11398
$logExtensionHostMessage @ workbench.desktop.main.js:11398
_doInvokeHandler @ workbench.desktop.main.js:33981
_invokeHandler @ workbench.desktop.main.js:33981
_receiveRequest @ workbench.desktop.main.js:33981
_receiveOneMessage @ workbench.desktop.main.js:33981
(anonymous) @ workbench.desktop.main.js:33981
_deliver @ workbench.desktop.main.js:49
fire @ workbench.desktop.main.js:49
fire @ workbench.desktop.main.js:11415
(anonymous) @ workbench.desktop.main.js:36042
workbench.desktop.main.js:11398 [Extension Host] [otel.error] {“stack”:“OTLPExporterError: Bad Request\n\tat IncomingMessage. (/Applications/Cursor.app/Contents/Resources/app/node_modules/@opentelemetry/otlp-exporter-base/build/src/transport/http-transport-utils.js:52:31)\n\tat IncomingMessage.emit (node:events:531:35)\n\tat endReadableNT (node:internal/streams/readable:1698:12)\n\tat process.processTicksAndRejections (node:internal/process/task_queues:90:21)”,“message”:“Bad Request”,“code”:“400”,“name”:“OTLPExporterError”,“data”:“{“error”:“Trace spans collection is not enabled for this user”}”}
qMf @ workbench.desktop.main.js:11398
$logExtensionHostMessage @ workbench.desktop.main.js:11398
_doInvokeHandler @ workbench.desktop.main.js:33981
_invokeHandler @ workbench.desktop.main.js:33981
_receiveRequest @ workbench.desktop.main.js:33981
_receiveOneMessage @ workbench.desktop.main.js:33981
(anonymous) @ workbench.desktop.main.js:33981
_deliver @ workbench.desktop.main.js:49
fire @ workbench.desktop.main.js:49
fire @ workbench.desktop.main.js:11415
(anonymous) @ workbench.desktop.main.js:36042
//
undefined
workbench.desktop.main.js:34040 [composer] No first token received within 2s {arch: ‘arm64’, platform: ‘darwin’, channel: ‘stable’, client_version: ‘2.4.23’, requestId: ‘adcf7bc9-6466-4acb-a545-2eb8d134b5e7’, …}
_log @ workbench.desktop.main.js:34040
warn @ workbench.desktop.main.js:34040
(anonymous) @ workbench.desktop.main.js:9169
setTimeout
e.setTimeout @ workbench.desktop.main.js:33432
(anonymous) @ workbench.desktop.main.js:9169
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:9169
await in submitChatMaybeAbortCurrent
$i @ workbench.desktop.main.js:32991
await in $i
(anonymous) @ workbench.desktop.main.js:32965
dt @ workbench.desktop.main.js:32965
onClick @ workbench.desktop.main.js:32965
(anonymous) @ workbench.desktop.main.js:9197
workbench.desktop.main.js:34040 [composer] No first token received within 4s {arch: ‘arm64’, platform: ‘darwin’, channel: ‘stable’, client_version: ‘2.4.23’, requestId: ‘adcf7bc9-6466-4acb-a545-2eb8d134b5e7’, …}
_log @ workbench.desktop.main.js:34040
warn @ workbench.desktop.main.js:34040
(anonymous) @ workbench.desktop.main.js:9169
setTimeout
e.setTimeout @ workbench.desktop.main.js:33432
(anonymous) @ workbench.desktop.main.js:9169
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:9169
await in submitChatMaybeAbortCurrent
$i @ workbench.desktop.main.js:32991
await in $i
(anonymous) @ workbench.desktop.main.js:32965
dt @ workbench.desktop.main.js:32965
onClick @ workbench.desktop.main.js:32965
(anonymous) @ workbench.desktop.main.js:9197
workbench.desktop.main.js:34040 [composer] No first token received within 6s {arch: ‘arm64’, platform: ‘darwin’, channel: ‘stable’, client_version: ‘2.4.23’, requestId: ‘adcf7bc9-6466-4acb-a545-2eb8d134b5e7’, …}
_log @ workbench.desktop.main.js:34040
warn @ workbench.desktop.main.js:34040
(anonymous) @ workbench.desktop.main.js:9169
setTimeout
e.setTimeout @ workbench.desktop.main.js:33432
(anonymous) @ workbench.desktop.main.js:9169
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:9169
await in submitChatMaybeAbortCurrent
$i @ workbench.desktop.main.js:32991
await in $i
(anonymous) @ workbench.desktop.main.js:32965
dt @ workbench.desktop.main.js:32965
onClick @ workbench.desktop.main.js:32965
(anonymous) @ workbench.desktop.main.js:9197
workbench.desktop.main.js:34040 [composer] No first token received within 8s {arch: ‘arm64’, platform: ‘darwin’, channel: ‘stable’, client_version: ‘2.4.23’, requestId: ‘adcf7bc9-6466-4acb-a545-2eb8d134b5e7’, …}
_log @ workbench.desktop.main.js:34040
warn @ workbench.desktop.main.js:34040
(anonymous) @ workbench.desktop.main.js:9169
setTimeout
e.setTimeout @ workbench.desktop.main.js:33432
(anonymous) @ workbench.desktop.main.js:9169
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:9169
await in submitChatMaybeAbortCurrent
$i @ workbench.desktop.main.js:32991
await in $i
(anonymous) @ workbench.desktop.main.js:32965
dt @ workbench.desktop.main.js:32965
onClick @ workbench.desktop.main.js:32965
(anonymous) @ workbench.desktop.main.js:9197

Update: I deleted my .cursor entries for workspace and the directory. Yes, that caused me to lose all my chats which is BS and sucks, but c’est la vie. I was then able to add the directory in cursor and save a new workspace file, which does create the necessary /tools directory. But if I enable autosave on the workspace, that tools directory gets deleted the first time autosave happens. So Cursor devs, there’s your smoking gun.

Thanks @Dario_Tschannen, this worked for me!

Adding some root cause analysis from log files that may help the Cursor team fix this. Still hitting this on Cursor 2.4.31 on Windows 11 (multi-root .code-workspace).

Root Cause (from extension logs)

The Cursor IDE Browser Automation extension calls injectBrowserUIScript once during activation. If the Simple Browser panel is not already open at that moment, it fails and never retries:

Cursor IDE Browser Automation.log:

[INFO] Cursor Browser Automation extension activated
[INFO] Browser Automation MCP Provider initialized with direct execution
[INFO] injectBrowserUIScript called
[ERROR] Failed to inject browser UI script:: No browser view available
Error: No browser view available
    at jyt (workbench.desktop.main.js:34255:73836)

The MCP server then permanently reports 0 tools for the entire session:

Mcp FileSystem Writer.log:

MCP server "cursor-ide-browser" (cursor-ide-browser): 0 tool(s), 0 resource(s), 0 prompt(s) {"status":"connected"}

The browser-use subagent then fails with:

Error: MCP file system options are required for CallMcpTool

Why the “Reload Window” workaround doesn’t work

There’s a race condition: after Reload Window, the extension activates before the Simple Browser panel is restored, so injectBrowserUIScript fails again with the same “No browser view available” error.

Suggested Fix

The extension should use an event-driven retry — listen for when a browser view becomes available (e.g., onDidChangeVisibleWebviewPanels or similar) rather than attempting injection only once at activation time.

Environment

  • Cursor: 2.4.31
  • OS: Windows 11 (10.0.26200)
  • Workspace type: Multi-root (.code-workspace file)