opencode-morph-rotationOpenCode plugin for Morph API key rotation with rate limit handling
2
+1 in 30 days
16
4 in 7 days
25.6
Multi-signal model
5 months ago
2026-03-23
Install and configure
opencode.jsonWrites to this project's opencode.json — applies to this repository only.
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-morph-rotation@0.1.0"]
}Writes to ~/.config/opencode/opencode.json — applies to every project.
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-morph-rotation@0.1.0"]
}If you want to modify the plugin locally, install it into the project and reference the local path.
shell
pnpm add -D opencode-morph-rotationopencode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.
OpenCode plugin for automatic Morph API key rotation with rate-limit handling.
Features
- 🔄 Automatic key rotation when rate limited
- 📊 Key health monitoring and status reporting
- ➕ Add/remove keys at runtime via tools
- 🛡️ Auto-disable keys after repeated failures
- 📋
/morph-quotaslash command for quick status
Installation
Add to your opencode.jsonc:
{
"plugin": [
"opencode-morph-rotation@latest"
]
}
Then restart OpenCode.
Setup
1. Add your keys
Use the morph_add_key tool in chat:
Add my Morph key sk-ABC123... with label "account1"
Or manually create ~/.config/opencode/morph-keys.json:
{
"keys": [
{
"key": "sk-YOUR_KEY_1",
"label": "account1",
"enabled": true,
"rateLimitResetTime": 0,
"consecutiveFailures": 0,
"lastUsed": 0,
"addedAt": 1711152000000
}
],
"strategy": "least-recently-used",
"defaultCooldownMs": 60000,
"maxConsecutiveFailures": 5
}
2. Remove MORPH_API_KEY from MCP config
Since the plugin injects MORPH_API_KEY via shell.env, remove any hardcoded key from your MCP server config to avoid conflicts.
Available Tools
| Tool | Description |
|---|---|
morph_quota |
Show status of all keys |
morph_add_key |
Add a new key for rotation |
morph_remove_key |
Remove a key by label |
morph_mark_rate_limited |
Manually mark a key as rate limited |
Rotation Strategies
- least-recently-used (default): Picks the key used longest ago
- round-robin: Cycles through keys in order
- sticky: Stays on current key until it fails
How It Works
- Plugin loads on OpenCode start
- Before each shell/tool execution,
shell.envhook picks the best available key - When a key hits rate limit (429), use
morph_mark_rate_limitedto rotate - Disabled keys re-enable after cooldown period
License
MIT