← Docs

Quickstart

ChiefLab in 60 seconds.

Pick one live path — hosted MCP, Cursor one-click, or direct HTTPS. Get a key, fire your first launch. The product is the closed loop: chiefmo_launch_product → user approves on signed reviewUrl → chiefmo_publish_approved_post + chiefmo_send_approved_email → 24h later chiefmo_measure_launch_results.

Step 1 — Get an API key (10 seconds)

One click at chieflab.io/get-key. No email. The page mints a workspace + key for you. Save the clp_dev_… string.

Or, agent-first: have your agent call chieflab_signup_workspace on your behalf. The agent surfaces a single-use delivery URL; you click, copy the key, paste into your agent's config.

Step 2 — Install (pick one path, ~30 seconds)

Hosted MCP (live today)

curl -X POST https://api.chieflab.io/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Cursor (one-click)

Open this cursor:// link. Paste your key when prompted. Restart Cursor. The chiefmo_* tools appear in your tool picker.

Claude Desktop / Claude Code / any remote-MCP host

Use the hosted MCP URL directly where your host supports remote MCP:

{
  "mcpServers": {
    "chieflab": {
      "url": "https://api.chieflab.io/api/mcp",
      "headers": { "Authorization": "Bearer clp_dev_<paste-your-key>" }
    }
  }
}

If your host only supports stdio MCP, install the bridge:

npm install -g @chieflab/mcp-server

Direct HTTPS (no install)

curl https://api.chieflab.io/api/mcp \
  -H "Authorization: Bearer clp_dev_..." \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"chiefmo_launch_product","arguments":{"productUrl":"yoursite.com","goal":"Get our first 100 users"}}}'

Fallback host: if api.chieflab.io ever returns a network error, you can swap to the brand domain https://chieflab.io/api/mcp — same backend, routed through Cloudflare. Both surfaces are smoke-checked on every deploy (scripts/customer-smoke.mjs).

TypeScript SDK / CLI

npx @chieflab/cli init
npm install @chieflab/sdk

The CLI plants repo-level agent instructions. The SDK wraps the hosted MCP for app/runtime integrations.

Step 3 — Fire your first launch (~20 seconds)

From HTTPS

curl -X POST https://api.chieflab.io/api/mcp \
  -H "Authorization: Bearer $CHIEFLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": {
      "name": "chiefmo_launch_product",
      "arguments": {
        "productUrl": "https://yoursite.com",
        "goal": "Get our first 100 users",
        "channels": ["linkedin", "x", "email"]
      }
    }
  }'

From inside Cursor / Claude Desktop / Codex

> I just shipped my product at https://yoursite.com.
  Use ChiefMO to launch it.

The agent picks chiefmo_launch_product automatically (BM25 match on "launch" + the server-level instructions field).

What you get back

{
  "launchId":      "...",
  "launchPack": {
    "positioning": { ... },           // source-of-truth paragraph
    "channels": {
      "linkedin":  { body, ... },     // per-channel briefs
      "x":         { body, ... },
      "email":     { body, ... }
    }
  },
  "publishActions": [                  // approval-gated, persisted
    { id, channel, connector, executorTool: "chiefmo_publish_approved_post",
      status: "awaiting_approval", preflight: { ... } }
  ],
  "reviewUrl":     "https://chieflab.io/runs/<id>?token=..."  // HMAC, 7-day TTL
}

Step 4 — Approve in browser → ship

Open the reviewUrl. No login. Read the briefs. Approve each action. Then your agent fires:

# Call each approved action's executorTool via tools/call.
# Example executor names:
#   chiefmo_publish_approved_post
#   chiefmo_send_approved_email

Each fires for real (Zernio for social, Resend for email). Returns the live platform URL / messageId. Read the full closed-loop guide →

Step 5 — 24h later

# 24h later, call:
# chiefmo_measure_launch_results({ "runId": "..." })

Pulls Zernio engagement + GA4 traffic + Search Console queries. Recommends ONE next-iteration change. The cron at /api/cron/tick auto-fires this for every publish that records a launch_followup row, so even if you never call it manually the metrics + recommendation get webhooked back to you (if webhookUrl was set on the launch).

What's next