3.3 KiB
deepseek-cursor-proxy
Compatibility proxy connecting Cursor to DeepSeek thinking models (deepseek-v4-pro and deepseek-v4-flash).
What It Does
- ✅ Caches DeepSeek
reasoning_contentfrom regular and streamed responses, then restores it on later tool-call turns when Cursor omits it. See DeepSeek docs for more details. - ✅ Mirrors streamed
reasoning_contentinto Cursor-visible<think>...</think>text so that thinking tokens are shown in Cursor's UI. For BYOK/proxy mode, Cursor renders this as normal text, not as a native collapsible thinking block. - ✅ Starts an ngrok tunnel so Cursor can reach the local proxy.
- ✅ Provides other compatibility fixes to make DeepSeek models run well in Cursor.
Why This Exists
This repository fixes the following Cursor + DeepSeek tool-call error with thinking mode enabled:
⚠️ Connection Error
Provider returned error:
{
"error": {
"message": "The reasoning_content in the thinking mode must be passed back to the API.",
"type": "invalid_request_error",
"param": null,
"code": "invalid_request_error"
}
}
Usage
Step 1: Set Up ngrok
Create an ngrok account, visit ngrok's Dashboard: https://dashboard.ngrok.com
Then, install and authenticate ngrok once:
brew install ngrok
ngrok config add-authtoken <your-ngrok-token>
Step 2: Add Cursor Custom Model
In Cursor, add the DeepSeek custom model and point it at this proxy:
- Model:
deepseek-v4-pro - API Key: your DeepSeek API key
- Base URL: your ngrok HTTPS URL with the
/v1API version path
For example, if ngrok dashboard shows https://example.ngrok-free.app, use:
https://example.ngrok-free.app/v1
Note: you can toggle the custom API on and off with:
- macOS:
Cmd+Shift+0 - Windows/Linux:
Ctrl+Shift+0
Step 3: Start the Proxy Server
Install and run the proxy:
# Or, use your favourite Python package manager
conda create -n dcp python=3.10 -y
conda activate dcp
# Install
pip install -e .
# Run in normal mode
deepseek-cursor-proxy
The proxy creates ~/.deepseek-cursor-proxy/config.yaml on first run.
This will also print the ngrok public URL. If it differs from the one in Cursor, update it in Cursor's Base URL field.
Normal mode prints startup info, the ngrok URL, and safe request summaries. It does not print prompts, code, API keys, or request bodies.
For more request lifecycle metadata, use verbose mode:
deepseek-cursor-proxy --verbose
Verbose mode adds client/path/upstream metadata and full payload logs. It may print prompts and code to the terminal, so keep it off for normal use.
Step 4: Chat with DeepSeek in Cursor
Select deepseek-v4-pro in Cursor and use chat or agent mode as usual.
Debugging and Development
Run without ngrok for local curl testing:
PROXY_NGROK=false deepseek-cursor-proxy --port 9000 --verbose
Use another config file:
deepseek-cursor-proxy --config ./dev.config.yaml
Run tests:
PYTHONPATH=src python -m unittest discover -s tests



