Connecting local AI server to Cursor does not work

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

I have a local AI server running ollama and responding correctly on the standard port. But Cursor refuses to connect to the server using the “Override OpenAI Base URL” option and adding one of the models supplied by the ollama server. I can check the connections made to the server, but cursor does not initiate any connection, does not check the available models etc. I have tried this using HTTP and HTTPS connections. I have tried all models available on the server, but always get a “AI Model Not Found” in the chat window.

Steps to Reproduce

Setup local ollama server
Try to connect to server using “Override OpenAI Base URL”

Expected Behavior

Cursor is expected to connect ot the Ollama server (and communicate correctly, but initial connection fails already)

Operating System

Windows 10/11

Version Information

Version: 2.5.25 (user setup)
VSCode Version: 1.105.1
Commit: 7150844152b426ed50d2b68dd6b33b5c5beb73c0
Date: 2026-02-24T07:17:49.417Z
Build Type: Stable
Release Track: Default
Electron: 39.4.0
Chromium: 142.0.7444.265
Node.js: 22.22.0
V8: 14.2.231.22-electron.0
OS: Windows_NT x64 10.0.19045

For AI issues: which model did you use?

gpt-oss:20b etc.

Additional Information

workbench.desktop.main.js:44241 [transport] [AGENT_ERROR_DIAGNOSTICS] requestId=96956425-9192-494c-9c8b-02f4e6d0caf4 decision=THROW aXt {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, decision: ‘THROW aXt’, …}
_log @ workbench.desktop.main.js:44241
warn @ workbench.desktop.main.js:44241
log @ workbench.desktop.main.js:32116
e @ workbench.desktop.main.js:464
warn @ workbench.desktop.main.js:464
run @ workbench.desktop.main.js:32116
await in run
run @ workbench.desktop.main.js:44360
runAgentLoop @ workbench.desktop.main.js:44360
streamFromAgentBackend @ workbench.desktop.main.js:44408
await in streamFromAgentBackend
getAgentStreamResponse @ workbench.desktop.main.js:44408
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:44241 [transport] [nal_agent_retries] Error not retryable {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, attempt: 0, …}
_log @ workbench.desktop.main.js:44241
warn @ workbench.desktop.main.js:44241
log @ workbench.desktop.main.js:32116
e @ workbench.desktop.main.js:464
warn @ workbench.desktop.main.js:464
run @ workbench.desktop.main.js:32116
await in run
run @ workbench.desktop.main.js:44360
runAgentLoop @ workbench.desktop.main.js:44360
streamFromAgentBackend @ workbench.desktop.main.js:44408
await in streamFromAgentBackend
getAgentStreamResponse @ workbench.desktop.main.js:44408
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:32182 [composer] Error in AI response: undefined aXt: AI Model Not Found Model name is not valid: “gptoss20bplain”
at jpA (workbench.desktop.main.js:32115:44798)
at WpA (workbench.desktop.main.js:32115:43786)
at ZpA (workbench.desktop.main.js:32116:5088)
at Ool.run (workbench.desktop.main.js:32116:9098)
at async s$o.runAgentLoop (workbench.desktop.main.js:44360:8423)
at async zOl.streamFromAgentBackend (workbench.desktop.main.js:44408:8884)
at async zOl.getAgentStreamResponse (workbench.desktop.main.js:44408:9837)
at async yLe.submitChatMaybeAbortCurrent (workbench.desktop.main.js:32182:15752)
at async Gs (workbench.desktop.main.js:43415:4781)Caused by: ConnectError: [not_found] Error
at o6g.$endAiConnectTransportReportError (workbench.desktop.main.js:43352:34726)
at Nxt._doInvokeHandler (workbench.desktop.main.js:44181:23171)
at Nxt._invokeHandler (workbench.desktop.main.js:44181:22913)
at Nxt._receiveRequest (workbench.desktop.main.js:44181:21545)
at Nxt._receiveOneMessage (workbench.desktop.main.js:44181:20362)
at UCn.value (workbench.desktop.main.js:44181:18389)
at He._deliver (workbench.desktop.main.js:55:2962)
at He.fire (workbench.desktop.main.js:55:3283)
at osn.fire (workbench.desktop.main.js:43336:12156)
at MessagePort. (workbench.desktop.main.js:47217:18406)
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:44241 [composer] Error in AI response aXt: AI Model Not Found Model name is not valid: “gptoss20bplain”
at jpA (workbench.desktop.main.js:32115:44798)
at WpA (workbench.desktop.main.js:32115:43786)
at ZpA (workbench.desktop.main.js:32116:5088)
at Ool.run (workbench.desktop.main.js:32116:9098)
at async s$o.runAgentLoop (workbench.desktop.main.js:44360:8423)
at async zOl.streamFromAgentBackend (workbench.desktop.main.js:44408:8884)
at async zOl.getAgentStreamResponse (workbench.desktop.main.js:44408:9837)
at async yLe.submitChatMaybeAbortCurrent (workbench.desktop.main.js:32182:15752)
at async Gs (workbench.desktop.main.js:43415:4781)Caused by: ConnectError: [not_found] Error
at o6g.$endAiConnectTransportReportError (workbench.desktop.main.js:43352:34726)
at Nxt._doInvokeHandler (workbench.desktop.main.js:44181:23171)
at Nxt._invokeHandler (workbench.desktop.main.js:44181:22913)
at Nxt._receiveRequest (workbench.desktop.main.js:44181:21545)
at Nxt._receiveOneMessage (workbench.desktop.main.js:44181:20362)
at UCn.value (workbench.desktop.main.js:44181:18389)
at He._deliver (workbench.desktop.main.js:55:2962)
at He.fire (workbench.desktop.main.js:55:3283)
at osn.fire (workbench.desktop.main.js:43336:12156)
at MessagePort. (workbench.desktop.main.js:47217:18406) {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, error: {…}, …}
error @ workbench.desktop.main.js:44241
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:44241 [composer] Model reset by fixUnavailable {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, subkey: ‘fix_unavailable_model_reset’, …}
_log @ workbench.desktop.main.js:44241
warn @ workbench.desktop.main.js:44241
handleAvailableModelsChange @ workbench.desktop.main.js:32026
refreshDefaultModels @ workbench.desktop.main.js:44241
await in refreshDefaultModels
(anonymous) @ workbench.desktop.main.js:44296
await in (anonymous)
(anonymous) @ workbench.desktop.main.js:44296
workbench.desktop.main.js:44241 [transport] Stream error reported from extension host ConnectError: [not_found] Error
at o6g.$endAiConnectTransportReportError (workbench.desktop.main.js:43352:34726)
at Nxt._doInvokeHandler (workbench.desktop.main.js:44181:23171)
at Nxt._invokeHandler (workbench.desktop.main.js:44181:22913)
at Nxt._receiveRequest (workbench.desktop.main.js:44181:21545)
at Nxt._receiveOneMessage (workbench.desktop.main.js:44181:20362)
at UCn.value (workbench.desktop.main.js:44181:18389)
at He._deliver (workbench.desktop.main.js:55:2962)
at He.fire (workbench.desktop.main.js:55:3283)
at osn.fire (workbench.desktop.main.js:43336:12156)
at MessagePort. (workbench.desktop.main.js:47217:18406) {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, error: {…}, …}
error @ workbench.desktop.main.js:44241
$endAiConnectTransportReportError @ workbench.desktop.main.js:43352
_doInvokeHandler @ workbench.desktop.main.js:44181
_invokeHandler @ workbench.desktop.main.js:44181
_receiveRequest @ workbench.desktop.main.js:44181
_receiveOneMessage @ workbench.desktop.main.js:44181
(anonymous) @ workbench.desktop.main.js:44181
_deliver @ workbench.desktop.main.js:55
fire @ workbench.desktop.main.js:55
fire @ workbench.desktop.main.js:43336
(anonymous) @ workbench.desktop.main.js:47217
workbench.desktop.main.js:44241 [transport] [AGENT_ERROR_DIAGNOSTICS] requestId=ed452fde-fe51-42ff-8267-658817ee1816 decision=THROW aXt {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, decision: ‘THROW aXt’, …}
_log @ workbench.desktop.main.js:44241
warn @ workbench.desktop.main.js:44241
log @ workbench.desktop.main.js:32116
e @ workbench.desktop.main.js:464
warn @ workbench.desktop.main.js:464
run @ workbench.desktop.main.js:32116
await in run
run @ workbench.desktop.main.js:44360
runAgentLoop @ workbench.desktop.main.js:44360
streamFromAgentBackend @ workbench.desktop.main.js:44408
await in streamFromAgentBackend
getAgentStreamResponse @ workbench.desktop.main.js:44408
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:44241 [transport] [nal_agent_retries] Error not retryable {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, attempt: 0, …}
_log @ workbench.desktop.main.js:44241
warn @ workbench.desktop.main.js:44241
log @ workbench.desktop.main.js:32116
e @ workbench.desktop.main.js:464
warn @ workbench.desktop.main.js:464
run @ workbench.desktop.main.js:32116
await in run
run @ workbench.desktop.main.js:44360
runAgentLoop @ workbench.desktop.main.js:44360
streamFromAgentBackend @ workbench.desktop.main.js:44408
await in streamFromAgentBackend
getAgentStreamResponse @ workbench.desktop.main.js:44408
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:32182 [composer] Error in AI response: undefined aXt: AI Model Not Found Model name is not valid: “gptoss20b”
at jpA (workbench.desktop.main.js:32115:44798)
at WpA (workbench.desktop.main.js:32115:43786)
at ZpA (workbench.desktop.main.js:32116:5088)
at Ool.run (workbench.desktop.main.js:32116:9098)
at async s$o.runAgentLoop (workbench.desktop.main.js:44360:8423)
at async zOl.streamFromAgentBackend (workbench.desktop.main.js:44408:8884)
at async zOl.getAgentStreamResponse (workbench.desktop.main.js:44408:9837)
at async yLe.submitChatMaybeAbortCurrent (workbench.desktop.main.js:32182:15752)
at async Gs (workbench.desktop.main.js:43415:4781)Caused by: ConnectError: [not_found] Error
at o6g.$endAiConnectTransportReportError (workbench.desktop.main.js:43352:34726)
at Nxt._doInvokeHandler (workbench.desktop.main.js:44181:23171)
at Nxt._invokeHandler (workbench.desktop.main.js:44181:22913)
at Nxt._receiveRequest (workbench.desktop.main.js:44181:21545)
at Nxt._receiveOneMessage (workbench.desktop.main.js:44181:20362)
at UCn.value (workbench.desktop.main.js:44181:18389)
at He._deliver (workbench.desktop.main.js:55:2962)
at He.fire (workbench.desktop.main.js:55:3283)
at osn.fire (workbench.desktop.main.js:43336:12156)
at MessagePort. (workbench.desktop.main.js:47217:18406)
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:44241 [composer] Error in AI response aXt: AI Model Not Found Model name is not valid: “gptoss20b”
at jpA (workbench.desktop.main.js:32115:44798)
at WpA (workbench.desktop.main.js:32115:43786)
at ZpA (workbench.desktop.main.js:32116:5088)
at Ool.run (workbench.desktop.main.js:32116:9098)
at async s$o.runAgentLoop (workbench.desktop.main.js:44360:8423)
at async zOl.streamFromAgentBackend (workbench.desktop.main.js:44408:8884)
at async zOl.getAgentStreamResponse (workbench.desktop.main.js:44408:9837)
at async yLe.submitChatMaybeAbortCurrent (workbench.desktop.main.js:32182:15752)
at async Gs (workbench.desktop.main.js:43415:4781)Caused by: ConnectError: [not_found] Error
at o6g.$endAiConnectTransportReportError (workbench.desktop.main.js:43352:34726)
at Nxt._doInvokeHandler (workbench.desktop.main.js:44181:23171)
at Nxt._invokeHandler (workbench.desktop.main.js:44181:22913)
at Nxt._receiveRequest (workbench.desktop.main.js:44181:21545)
at Nxt._receiveOneMessage (workbench.desktop.main.js:44181:20362)
at UCn.value (workbench.desktop.main.js:44181:18389)
at He._deliver (workbench.desktop.main.js:55:2962)
at He.fire (workbench.desktop.main.js:55:3283)
at osn.fire (workbench.desktop.main.js:43336:12156)
at MessagePort. (workbench.desktop.main.js:47217:18406) {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, error: {…}, …}arch: "x64"cause: {error: {…}, errorDetailsDebug: Array(1)}causeCode: 5causeErrno: "undefined"causeSyscall: undefinedchannel: "stable"client_version: "2.5.25"composerId: "bb46e887-7dd3-4993-9e4b-86306305cc94"error: {message: ‘AI Model Not Found Model name is not valid: “gptoss20b”’, stack: ‘aXt: AI Model Not Found Model name is not valid: "…s/workbench/workbench.desktop.main.js:43415:4781)’, kind: ‘aXt’, code: undefined}errorCode: undefinederrorMessage: "aXt: AI Model Not Found Model name is not valid: "gptoss20b""errorType: undefinedisConnectError: "false"isRetryable: undefinedplatform: "win32"requestId: “ed452fde-fe51-42ff-8267-658817ee1816”[[Prototype]]: Object
error @ workbench.desktop.main.js:44241
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:32182
await in submitChatMaybeAbortCurrent
Gs @ workbench.desktop.main.js:43415
await in Gs
onSubmit @ workbench.desktop.main.js:43415
T @ workbench.desktop.main.js:43387
onSubmit @ workbench.desktop.main.js:43387
handleSubmit @ workbench.desktop.main.js:43290
(anonymous) @ workbench.desktop.main.js:43292
C$d @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
k$d @ workbench.desktop.main.js:453
Zue @ workbench.desktop.main.js:453
update @ workbench.desktop.main.js:455
C$d @ workbench.desktop.main.js:453
Td @ workbench.desktop.main.js:453
$7b @ workbench.desktop.main.js:453
(anonymous) @ workbench.desktop.main.js:453
workbench.desktop.main.js:44241 [composer] Model reset by fixUnavailable {arch: ‘x64’, platform: ‘win32’, channel: ‘stable’, client_version: ‘2.5.25’, subkey: ‘fix_unavailable_model_reset’, …}

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

Hey, there are actually two issues here.

  1. Localhost isn’t supported directly. All BYOK requests go through Cursor’s servers to build prompts, so localhost or local network addresses won’t work because the server can’t reach them. You’ll need to expose your Ollama instance as a public HTTPS endpoint using something like ngrok or Cloudflare Tunnel. Then use that public URL in Cursor Settings > Models > Override OpenAI Base URL.

Related thread with the same setup question: How can I use a local LLM on my desktop/AI computer?

  1. Model name validation bug. In your logs, gpt-oss:20b gets changed to gptoss20bplain because special characters like - and : are stripped out. As a result, the request goes to Cursor’s model registry instead of your local server.

Right now, even after setting up a tunnel, you may still hit this model name validation issue. As a workaround, try using a model name without special characters (if Ollama supports aliases).

Let me know if you’ve got any other questions.