Skip to content

randolph555/cursor2openai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cursor API Proxy

将 Cursor 聊天 API 转换为 OpenAI 兼容格式。

功能

  • OpenAI 兼容接口 - 标准 /v1/chat/completions 格式
  • 流式响应支持 - 实时返回生成内容
  • 多模型支持 - GPT-5、Claude 系列、Gemini、DeepSeek
  • 自动初始化 - 浏览器环境自动获取访问权限

安装

# 安装依赖
pip install -r requirements.txt

# 安装浏览器
playwright install chromium

使用

方式一:直接运行

# 使用启动脚本(推荐)
./start.sh

# 或手动启动
export API_KEY="your-secret-key"  # 可选
python3 cursor_proxy.py

# 停止服务
./stop.sh

方式二:Docker 运行

docker build -t cursor-proxy .
docker run -d -p 8888:8888 \
  -e OPENAI_API_KEY="your-secret-key" \
  --shm-size=2g \
  cursor-proxy

测试

# 健康检查
curl http://localhost:8888/health

# 非流式(如果设置了 API_KEY 需要加 Authorization 头)
curl -X POST http://localhost:8888/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-secret-key" \
  -d '{"model":"claude-sonnet-4-20250514","messages":[{"role":"user","content":"你好"}]}'

# 流式(需要 -N 参数)
curl -N -X POST http://localhost:8888/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-secret-key" \
  -d '{"model":"claude-sonnet-4-20250514","stream":true,"messages":[{"role":"user","content":"你好"}]}'

Python SDK

from openai import OpenAI

client = OpenAI(
    api_key="your-secret-key",  # 如果设置了 API_KEY
    base_url="http://localhost:8888/v1"
)

# 非流式
response = client.chat.completions.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)

# 流式
stream = client.chat.completions.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "你好"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

API

端点 说明 需要认证
POST /v1/chat/completions 聊天完成(OpenAI 兼容)
GET /v1/models 模型列表
GET /health 健康检查

认证方式: Authorization: Bearer <your-api-key>(仅当设置了 API_KEY 环境变量时需要)

模型

  • gpt-5
  • claude-opus-4-1-20250805
  • claude-opus-4-20250514
  • claude-sonnet-4-20250514 (默认)
  • gemini-2.5-pro
  • deepseek-v3.1

原理

使用 Playwright 启动 Chromium 浏览器,访问 Cursor 网站并通过 JavaScript 调用其内部 API,将响应转换为 OpenAI 兼容格式。

  1. Playwright 启动持久化浏览器会话,自动完成页面初始化
  2. Python 通过 page.evaluate() 执行 JavaScript 代码调用 Cursor API
  3. JavaScript 使用 ReadableStream 实时读取响应
  4. 通过 expose_function() 将数据实时传回 Python
  5. FastAPI 以 SSE 格式流式返回给客户端

环境变量

变量 说明 默认值
API_KEY API 认证密钥,不设置则无需认证
HEADLESS 无头模式,Linux/Docker 建议设为 true false

故障排查

常见问题

1. 启动时报错:Failed to create a ProcessSingleton

原因:浏览器进程已在运行,占用了会话目录。

解决:

# 使用停止脚本(推荐)
./stop.sh

# 或手动清理
pkill -9 -f cursor_proxy.py
pkill -9 -f Chromium

2. API 返回 401 Unauthorized

原因:设置了 API_KEY 但请求未带 Authorization 头。

解决:

# 添加 Authorization 头
curl -H "Authorization: Bearer your-secret-key" ...

# 或不设置 API_KEY(开发环境)
unset API_KEY

3. 检查服务状态

# 健康检查
curl http://localhost:8888/health

# 查看进程
ps aux | grep cursor_proxy.py

# 查看日志
tail -f /tmp/cursor_proxy.log

4. 浏览器未安装

playwright install chromium

5. Docker 相关

# 查看容器日志
docker logs -f <container_id>

# 重启容器
docker restart <container_id>

# 重建镜像
docker build -t cursor-proxy . && docker run -d -p 8888:8888 cursor-proxy

部署注意事项

  • 无头模式:Docker 环境自动使用 HEADLESS=true
  • 共享内存:Docker 运行需要增加 --shm-size=2g
  • 系统依赖:Dockerfile 已包含所有必需的浏览器依赖库
  • 初始化时间:首次启动需要 10-30 秒进行页面初始化

注意

⚠️ 仅用于学习研究,遵守 Cursor 服务条款。

About

高匿名的cursor2api

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages