open-delegate
open-delegate
Delegate a Cursor task to a real, unattended background OpenCode agent — cheaper model, isolated history — through five small MCP tools.
Goals
Goal | Detail |
Reduce Cursor spend | Hand work to cheaper OpenCode alternatives (Zen free, open-weights, mid/cheap OpenRouter) |
Real OpenCode handoff | Cursor "delegates" like the native tool, but OpenCode executes |
Trivial install | Finds the |
Guarded model policy | MCP-level default / force catalog / allow / deny; soft always-on routing rule |
Guarded lifecycle | Bounded waits, no leaked background processes, real error text |
Live preview | Each session returns its own |
Non-goals
Supporting IDEs other than Cursor
Chasing Anthropic/OpenAI flagship quality (Opus / Sonnet / Fable / GPT Sol / Terra are out of curated defaults)
Cursor slug → OpenCode remapping
Task-kind / persona auto-routing beyond configurable force / allow / deny lists
Replacing the native delegate tool for Cursor-native models not on the force list
Prerequisites
Cursor (this plugin is Cursor-only).
Node.js ≥ 18.17 (nodejs.org or your package manager).
OpenCode CLI on your
PATH(or setOPEN_DELEGATE_OPENCODE_BINto its full path).
Install OpenCode
Pick one (package name on npm is opencode-ai, not opencode):
macOS / Linux
# Recommended one-liner
curl -fsSL https://opencode.ai/install | bash
# Or via npm
npm i -g opencode-ai@latest
# Or Homebrew (tap stays more up to date than the official formula)
brew install anomalyco/tap/opencodeWindows
npm i -g opencode-ai@latest
# Or Scoop / Chocolatey
scoop install opencode
# choco install opencodeVerify:
opencode --versionConfigure a model
OpenCode needs at least one usable model. Either:
Run
opencode auth login(or/connectinside the OpenCode TUI) and add a provider API key, orUse a free hosted model such as
opencode/deepseek-v4-flash-free(no API key required for that path).
Docs: opencode.ai/docs.
Install
Note:
@verbalize/open-delegateis not yet published on npm, and the Cursor Marketplace listing is pending. Until then, install from a git clone (below), which registers a local Cursor plugin pointed at your build.
git clone git@github.com:Verbalize-public/open-delegate.git
cd open-delegate
npm install
npm run build
npm run register:localThen Cursor → Developer: Reload Window. Customize → MCP Tools should list open-delegate with five tools: ode_delegate, ode_await, ode_transcript, ode_cancel, ode_diagnostics.
register:local syncs the plugin into ~/.cursor/plugins/local/open-delegate with an mcp.json that runs node <checkout>/dist/index.cjs (avoids the npx 404 while the package is unpublished), and registers a workspaceOpen hook so Cursor loads that path. Re-run after moving the repo, pulling changes, or editing src/ (rebuild first).
Edit the installed ~/.cursor/plugins/local/open-delegate/mcp.json (keep the absolute args path the sync wrote):
{
"mcpServers": {
"open-delegate": {
"command": "node",
"args": ["/absolute/path/to/open-delegate/dist/index.cjs"],
"env": {
"OPEN_DELEGATE_DEFAULT_MODEL": "opencode/deepseek-v4-flash-free"
}
}
}
}On Windows the args path looks like C:/Users/<you>/…/open-delegate/dist/index.cjs (forward slashes are fine).
Optional lists (CSV): OPEN_DELEGATE_ODE_MODELS, OPEN_DELEGATE_ALLOW_MODELS, OPEN_DELEGATE_DENY_MODELS.
For a large custom force list, prefer OPEN_DELEGATE_ODE_MODELS_FILE (JSON array or CSV path) over a giant env CSV.
For a full OpenCode config blob (advanced), use OPEN_DELEGATE_OPENCODE_CONFIG_CONTENT instead.
Full env reference: skills/ode-delegate/reference/config.md.
How it works
Cursor (MCP client)
│ stdio, JSON-RPC
▼
open-delegate MCP server (this repo → dist/index.cjs)
│ spawns + owns
▼
opencode serve (1 shared default runtime)
│ HTTP via OpenCode's client SDK
▼
model / providerSoft rule
rules/open-delegate-routing.mdc: if the named model is on ODE_MODELS or isopenrouter/…, useode_delegate+ode_await(not native Task).The default
opencode serveruntime is pre-warmed right after MCP connect, so mostode_delegatecalls hit an already-warm process.ode_delegatereturns a stablesessionIdwithin a few seconds —status: "running"if setup already finished, orstatus: "starting"if it's still finishing in the background; poll withode_await(timeoutMs: 0for a single peek). OptionalwaitMscan finish short tasks in one call. PasssessionIdto resume a finished session.Before starting a prompt, models are checked against the live OpenCode
provider.list()snapshot (fail-fastMODEL_NOT_AVAILABLE).Prompts are capped at ~512KiB inline; use
promptPathfor anything larger.ode_awaitpolls OpenCode's/session/status+ message list — never the MCP server's own say-so alone.If
opencode servecrashes, every session pinned to it is marked"error"immediately (no hang).Closing the MCP connection disposes every spawned
opencode serveprocess.Internal events are logged as one-line JSON to stderr and to a PID-named file;
ode_diagnosticsreads them back live — see config.md and errors.md.
Documentation
Doc | Topic |
Agent-facing contract: when/how to use the five tools | |
Cheap force-set pins / job defaults | |
Tool-by-tool input/output | |
| |
Error shapes | |
Soft always-on routing (ODE_MODELS / openrouter → ODE) | |
Cost-first catalog research | |
Local development, testing, project layout, release gate | |
Diagnose host-side connection errors, find logs by pid |
Contributing
Issues and PRs welcome. See CONTRIBUTING.md for local setup, tests, project layout, and the maintainer release gate.
Troubleshooting
Hit a "Connection stopped"/timeout in Cursor, or need to find an opencode process's log by pid? See RUNBOOK.md.
License
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Verbalize-public/open-delegate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server