* feat(mcp-oauth): add oauth field to ClaudeCodeMcpServer schema Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai> * feat(mcp-oauth): add RFC 7591 Dynamic Client Registration * feat(mcp-oauth): add RFC 9728 PRM + RFC 8414 AS discovery * feat(mcp-oauth): add secure token storage with {host}/{resource} key format * feat(mcp-oauth): add dynamic port OAuth callback server * feat(mcp-oauth): add RFC 8707 Resource Indicators * feat(mcp-oauth): implement full-spec McpOAuthProvider * feat(mcp-oauth): add step-up authorization handler * feat(mcp-oauth): integrate authProvider into SkillMcpManager * feat(doctor): add MCP OAuth token status check * feat(cli): add mcp oauth subcommand structure * feat(cli): implement mcp oauth login command * fix(mcp-oauth): address cubic review — security, correctness, and test issues - Remove @ts-nocheck from provider.ts, storage.ts, provider.test.ts - Fix server resource leak on missing code/state (close + reject) - Fix command injection in openBrowser (spawn array args, cross-platform) - Mock McpOAuthProvider in login.test.ts for deterministic CI - Recreate auth provider with merged scopes in step-up flow - Add listAllTokens() for global status listing - Fix logout to accept --server-url for correct token deletion - Support both quoted and unquoted WWW-Authenticate params (RFC 2617) - Save/restore OPENCODE_CONFIG_DIR in storage.test.ts - Fix index.test.ts: vitest → bun:test * fix(mcp-oauth): use explorer instead of cmd /c start on Windows to prevent shell injection * fix(mcp-oauth): address remaining cubic review issues - Add 5-minute timeout to provider callback server to prevent indefinite hangs - Persist client registration from token storage across process restarts - Require --server-url for logout to match token storage key format - Use listTokensByHost for server-specific status lookups - Fix callback-server test to handle promise rejection ordering - Fix provider test port expectations (8912 → 19877) - Fix cli-guide.md duplicate Section 7 numbering - Fix manager test for login-on-missing-tokens behavior * fix(mcp-oauth): address final review issues - P1: Redact token values in status.ts output to prevent credential leakage - P2: Read OAuth error response body before throwing in token exchange - Test: Fix mcp-oauth doctor test to use epoch seconds (not milliseconds) --------- Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com> Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
7.3 KiB
Oh-My-OpenCode CLI Guide
This document provides a comprehensive guide to using the Oh-My-OpenCode CLI tools.
1. Overview
Oh-My-OpenCode provides CLI tools accessible via the bunx oh-my-opencode command. The CLI supports various features including plugin installation, environment diagnostics, and session execution.
# Basic execution (displays help)
bunx oh-my-opencode
# Or run with npx
npx oh-my-opencode
2. Available Commands
| Command | Description |
|---|---|
install |
Interactive Setup Wizard |
doctor |
Environment diagnostics and health checks |
run |
OpenCode session runner |
auth |
Google Antigravity authentication management |
version |
Display version information |
3. install - Interactive Setup Wizard
An interactive installation tool for initial Oh-My-OpenCode setup. Provides a beautiful TUI (Text User Interface) based on @clack/prompts.
Usage
bunx oh-my-opencode install
Installation Process
- Provider Selection: Choose your AI provider from Claude, ChatGPT, or Gemini.
- API Key Input: Enter the API key for your selected provider.
- Configuration File Creation: Generates
opencode.jsonoroh-my-opencode.jsonfiles. - Plugin Registration: Automatically registers the oh-my-opencode plugin in OpenCode settings.
Options
| Option | Description |
|---|---|
--no-tui |
Run in non-interactive mode without TUI (for CI/CD environments) |
--verbose |
Display detailed logs |
4. doctor - Environment Diagnostics
Diagnoses your environment to ensure Oh-My-OpenCode is functioning correctly. Performs 17+ health checks.
Usage
bunx oh-my-opencode doctor
Diagnostic Categories
| Category | Check Items |
|---|---|
| Installation | OpenCode version (>= 1.0.150), plugin registration status |
| Configuration | Configuration file validity, JSONC parsing |
| Authentication | Anthropic, OpenAI, Google API key validity |
| Dependencies | Bun, Node.js, Git installation status |
| Tools | LSP server status, MCP server status |
| Updates | Latest version check |
Options
| Option | Description |
|---|---|
--category <name> |
Check specific category only (e.g., --category authentication) |
--json |
Output results in JSON format |
--verbose |
Include detailed information |
Example Output
oh-my-opencode doctor
┌──────────────────────────────────────────────────┐
│ Oh-My-OpenCode Doctor │
└──────────────────────────────────────────────────┘
Installation
✓ OpenCode version: 1.0.155 (>= 1.0.150)
✓ Plugin registered in opencode.json
Configuration
✓ oh-my-opencode.json is valid
⚠ categories.visual-engineering: using default model
Authentication
✓ Anthropic API key configured
✓ OpenAI API key configured
✗ Google API key not found
Dependencies
✓ Bun 1.2.5 installed
✓ Node.js 22.0.0 installed
✓ Git 2.45.0 installed
Summary: 10 passed, 1 warning, 1 failed
5. run - OpenCode Session Runner
Executes OpenCode sessions and monitors task completion.
Usage
bunx oh-my-opencode run [prompt]
Options
| Option | Description |
|---|---|
--enforce-completion |
Keep session active until all TODOs are completed |
--timeout <seconds> |
Set maximum execution time |
6. mcp oauth - MCP OAuth Management
Manages OAuth 2.1 authentication for remote MCP servers.
Usage
# Login to an OAuth-protected MCP server
bunx oh-my-opencode mcp oauth login <server-name> --server-url https://api.example.com
# Login with explicit client ID and scopes
bunx oh-my-opencode mcp oauth login my-api --server-url https://api.example.com --client-id my-client --scopes "read,write"
# Remove stored OAuth tokens
bunx oh-my-opencode mcp oauth logout <server-name>
# Check OAuth token status
bunx oh-my-opencode mcp oauth status [server-name]
Options
| Option | Description |
|---|---|
--server-url <url> |
MCP server URL (required for login) |
--client-id <id> |
OAuth client ID (optional if server supports Dynamic Client Registration) |
--scopes <scopes> |
Comma-separated OAuth scopes |
Token Storage
Tokens are stored in ~/.config/opencode/mcp-oauth.json with 0600 permissions (owner read/write only). Key format: {serverHost}/{resource}.
7. auth - Authentication Management
Manages Google Antigravity OAuth authentication. Required for using Gemini models.
Usage
# Login
bunx oh-my-opencode auth login
# Logout
bunx oh-my-opencode auth logout
# Check current status
bunx oh-my-opencode auth status
8. Configuration Files
The CLI searches for configuration files in the following locations (in priority order):
- Project Level:
.opencode/oh-my-opencode.json - User Level:
~/.config/opencode/oh-my-opencode.json
JSONC Support
Configuration files support JSONC (JSON with Comments) format. You can use comments and trailing commas.
{
// Agent configuration
"sisyphus_agent": {
"disabled": false,
"planner_enabled": true,
},
/* Category customization */
"categories": {
"visual-engineering": {
"model": "google/gemini-3-pro",
},
},
}
9. Troubleshooting
"OpenCode version too old" Error
# Update OpenCode
npm install -g opencode@latest
# or
bun install -g opencode@latest
"Plugin not registered" Error
# Reinstall plugin
bunx oh-my-opencode install
Doctor Check Failures
# Diagnose with detailed information
bunx oh-my-opencode doctor --verbose
# Check specific category only
bunx oh-my-opencode doctor --category authentication
10. Non-Interactive Mode
Use the --no-tui option for CI/CD environments.
# Run doctor in CI environment
bunx oh-my-opencode doctor --no-tui --json
# Save results to file
bunx oh-my-opencode doctor --json > doctor-report.json
11. Developer Information
CLI Structure
src/cli/
├── index.ts # Commander.js-based main entry
├── install.ts # @clack/prompts-based TUI installer
├── config-manager.ts # JSONC parsing, multi-source config management
├── doctor/ # Health check system
│ ├── index.ts # Doctor command entry
│ └── checks/ # 17+ individual check modules
├── run/ # Session runner
└── commands/auth.ts # Authentication management
Adding New Doctor Checks
- Create
src/cli/doctor/checks/my-check.ts:
import type { DoctorCheck } from "../types"
export const myCheck: DoctorCheck = {
name: "my-check",
category: "environment",
check: async () => {
// Check logic
const isOk = await someValidation()
return {
status: isOk ? "pass" : "fail",
message: isOk ? "Everything looks good" : "Something is wrong",
}
},
}
- Register in
src/cli/doctor/checks/index.ts:
export { myCheck } from "./my-check"