opencode-cursor-oauth
August 21, 2026 · View on GitHub
OpenCode plugin that connects to Cursor's API, giving you access to Cursor models inside OpenCode with full tool-calling support.
OpenCode V2 beta
Install the plugin:
opencode2 plugin add opencode-cursor-oauth
The command adds the package to your global V2 configuration.
Start opencode2.
Run /connect.
Select Cursor.
The plugin adds Cursor OAuth and the available models to the V2 catalog.
You can also add the package directly to opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"plugins": [
"opencode-cursor-oauth"
]
}
OpenCode V1
Add the package to ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
"opencode-cursor-oauth"
]
}
Connect Cursor:
opencode auth login --provider cursor
OpenCode V1 and OpenCode V2 add the cursor provider and its models.
OpenCode installs npm plugins during startup.
You do not have to clone this repository.
Use
Start OpenCode and select any Cursor model. The plugin starts a local OpenAI-compatible proxy on demand and routes requests through Cursor's gRPC API.
How it works
- OAuth — browser-based login to Cursor via PKCE.
- Model discovery — queries Cursor's gRPC API for all available models.
- Local proxy — translates
POST /v1/chat/completionsinto Cursor's protobuf/HTTP/2 Connect protocol. - Native tool routing — redirects Cursor's built-in filesystem/shell tools to the equivalent OpenCode tools, and exposes OpenCode's tool surface via Cursor MCP.
HTTP/2 transport runs through a Node child process (h2-bridge.mjs) because
Bun's node:http2 support is not reliable against Cursor's API.
Architecture
OpenCode --> /v1/chat/completions --> Bun.serve (proxy)
|
Node child process (h2-bridge.mjs)
|
HTTP/2 Connect stream
|
api2.cursor.sh gRPC
/agent.v1.AgentService/Run
Tool call flow
1. Cursor model receives OpenAI tools via RequestContext (as MCP tool defs)
2. Model calls a tool:
- native tools (readArgs, shellArgs, grepArgs, ...) with an OpenCode
equivalent are redirected to it (read, bash, grep, glob, webfetch, write)
- native tools without an equivalent are rejected with a typed error
- MCP tools arrive as mcpArgs exec messages
3. Proxy emits OpenAI tool_calls SSE chunk, pauses H2 stream
4. OpenCode executes tool, sends result in follow-up request
5. Proxy resumes H2 stream with the typed native result (or mcpResult),
streams continuation
Conversation state
Conversation history is rebuilt from the OpenAI messages on every request
(rootPromptMessagesJson + content-addressed turn blobs), and server
checkpoints are persisted to ~/.cache/opencode-cursor/conversations/ so
context survives restarts. Set CURSOR_PROXY_DEBUG=1 to log the KV blob
handshake and exec traffic when debugging.
Develop locally
bun install
bun run build
bun test/smoke.ts