ops-integrate
Runtime Context
PREFS="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
PARTNER_REGISTRY=$(jq '.partner_registry // {}' "$PREFS" 2>/dev/null || echo '{}')
Parse $ARGUMENTS:
- Contains
--list→ run List registered integrations then exit - Otherwise → run Onboarding flow with the service name as first positional argument
OPS ► INTEGRATE
List registered integrations (--list)
jq -r '.partner_registry // {} | to_entries[] | "\(.key): \(.value.base_url) [\(.value.auth_type)]"' "$PREFS" 2>/dev/null
Display as a table:
Registered integrations:
hubspot https://api.hubapi.com [bearer]
stripe https://api.stripe.com [bearer]
sendgrid https://api.sendgrid.com [api-key]
If no integrations registered: No integrations registered yet. Run /ops:integrate <service-name> to add one.
Onboarding flow (5 steps)
Step 1 — Discover API details
If --url not provided, use WebSearch to find:
- Official API docs URL
- Base API URL
- Authentication pattern (bearer token / api-key header / basic auth / oauth2)
- API key generation URL (where the user gets credentials)
- Health/test endpoint (e.g., /healthz, /v1/ping, /me)
Step 2 — Confirm with user
Present findings via AskUserQuestion (≤4 options):
Found: <service-name> API — Base URL: <url> — Auth: <auth-type>
[Looks correct — continue] [Change base URL] [Change auth type] [Cancel]
If "Change base URL": AskUserQuestion with free-text input for the new URL.
If "Change auth type": AskUserQuestion (≤4 options): [bearer] [api-key] [basic] [oauth2]
Step 3 — Collect credential
Paste your <service-name> <auth-type> credential (it will be stored locally only)
[Paste now] [Configure later]
If "Paste now": collect credential via AskUserQuestion free-text. Derive key name: <lowercase_service_name>_api_key
Write to preferences.json via atomic tmpfile swap:
tmp=$(mktemp)
jq --arg k "$KEY_NAME" --arg v "$CREDENTIAL" '.[$k] = $v' "$PREFS" > "$tmp" && mv "$tmp" "$PREFS"
Step 4 — Health check
Curl the health/test endpoint with the credential:
# Bearer token
curl -sf -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer ${CREDENTIAL}" \
"${BASE_URL}${HEALTH_ENDPOINT}"
# API key header (X-Api-Key)
curl -sf -o /dev/null -w "%{http_code}" \
-H "X-Api-Key: ${CREDENTIAL}" \
"${BASE_URL}${HEALTH_ENDPOINT}"
# Basic auth
curl -sf -o /dev/null -w "%{http_code}" \
-u "${CREDENTIAL}:" \
"${BASE_URL}${HEALTH_ENDPOINT}"
Report: ✅ if HTTP 200-299, ⚠️ with status code otherwise. If credential not yet configured, skip health check and report ⬜ health check skipped — credential not configured.
Step 5 — Register in partner registry
tmp=$(mktemp)
jq --arg name "${SERVICE_NAME}" \
--arg url "${BASE_URL}" \
--arg auth "${AUTH_TYPE}" \
--arg key_name "${KEY_NAME}" \
--arg health "${HEALTH_ENDPOINT}" \
'.partner_registry[$name] = {base_url: $url, auth_type: $auth, credential_key: $key_name, health_endpoint: $health, added: (now | todate)}' \
"$PREFS" > "$tmp" && mv "$tmp" "$PREFS"
Confirmation output:
✅ <service-name> registered in partner registry
Auth: <auth-type>
Health: <base-url><health-endpoint>
Credential key: <key-name>
Access via: jq '.partner_registry["<service-name>"]' $PREFS
CLI/API Reference
# List all registered integrations
jq '.partner_registry' "${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
# Look up a specific integration
jq '.partner_registry["hubspot"]' "$PREFS"
# Read a credential for a registered integration
jq -r ".$KEY_NAME" "$PREFS"
# Remove an integration from the registry
jq 'del(.partner_registry["<service-name>"])' "$PREFS" > tmp && mv tmp "$PREFS"
More from davepoon/buildwithclaude
file-organizer
Intelligently organizes your files and folders across your computer by understanding context, finding duplicates, suggesting better structures, and automating cleanup tasks. Reduces cognitive load and keeps your digital workspace tidy without manual effort.
212xlsx
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas
187content-research-writer
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
141docx
Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
122auth-patterns
This skill should be used when the user asks about "authentication in Next.js", "NextAuth", "Auth.js", "middleware auth", "protected routes", "session management", "JWT", "login flow", or needs guidance on implementing authentication and authorization in Next.js applications.
104server-actions
This skill should be used when the user asks about "Server Actions", "form handling in Next.js", "mutations", "useFormState", "useFormStatus", "revalidatePath", "revalidateTag", or needs guidance on data mutations and form submissions in Next.js App Router.
100