Quickstart — 5 minutes to your first intake

This guide walks you through installing BriefGate, connecting it to your coding agent, and sending your first client intake.


Prerequisites


1. Install the MCP server

bash
npm install -g @briefgate/mcp

Verify the installation:

bash
briefgate-mcp --version

2. Add BriefGate to Claude Code

You have two options. Both produce the same result — choose whichever fits your workflow.

Option A — Claude Code CLI:

bash
claude mcp add briefgate -- briefgate-mcp --api-key bg_live_xxxxx

Option B — Manual config in ~/.claude/mcp.json:

json
{
  "mcpServers": {
    "briefgate": {
      "command": "briefgate-mcp",
      "args": ["--api-key", "bg_live_xxxxx"]
    }
  }
}

Replace bg_live_xxxxx with your actual API key. Use a bg_test_xxxxx key during development — test mode uses a sandbox email provider and never sends real messages to clients.

Restart Claude Code after editing the config file.


3. Your first intake

The example below creates an intake for a restaurant website project. Paste this into your agent's context (or call the define_intake MCP tool directly):

json
{
  "project_name": "Bella Napoli — Website",
  "client": {
    "email": "owner@bellanapoli.com",
    "name": "Marco Esposito",
    "language": "en"
  },
  "items": [
    {
      "key": "logo",
      "label": "Restaurant logo",
      "help": "Upload your logo in SVG or PNG format with a transparent background. Minimum 512px on the shortest side.",
      "type": "image",
      "required": true,
      "constraints": {
        "formats": ["svg", "png"],
        "min_width": 512,
        "transparent_background": true
      }
    },
    {
      "key": "hero_copy",
      "label": "Hero section tagline",
      "help": "A short paragraph (up to 400 characters) that captures the spirit of the restaurant. This appears above the fold on the homepage.",
      "type": "longtext",
      "required": true,
      "constraints": {
        "max_chars": 400
      }
    },
    {
      "key": "opening_hours",
      "label": "Opening hours",
      "help": "Your regular opening hours. Use a simple format like '12:00-22:00' or 'Closed'.",
      "type": "structured",
      "required": true,
      "schema": {
        "type": "object",
        "required": ["mon_fri", "sat", "sun"],
        "properties": {
          "mon_fri": { "type": "string", "example": "12:00-22:00" },
          "sat":     { "type": "string", "example": "12:00-23:00" },
          "sun":     { "type": "string", "example": "13:00-21:00" }
        }
      }
    },
    {
      "key": "photos",
      "label": "Food and interior photos",
      "help": "Upload between 5 and 15 photos of your food, interior, and ambience. JPG, PNG, or HEIC.",
      "type": "file_list",
      "required": true,
      "constraints": {
        "formats": ["jpg", "png", "heic"],
        "min_count": 5,
        "max_count": 15
      }
    }
  ],
  "chase_schedule": "default"
}

The tool returns:

json
{
  "intake_id": "in_8f3kQmR2",
  "portal_url": "https://app.briefgate.dev/portal/in_8f3kQmR2",
  "status": "sent",
  "items": [
    { "key": "logo",          "status": "pending" },
    { "key": "hero_copy",     "status": "pending" },
    { "key": "opening_hours", "status": "pending" },
    { "key": "photos",        "status": "pending" }
  ]
}

BriefGate immediately sends the client an email containing the portal_url. The intake status becomes sent.


4. What happens next

  1. The client receives an email with a link to their personal intake portal.
  2. They upload or fill in each item directly in the browser — no account required.
  3. As they submit items, BriefGate fires webhooks to your endpoint (configure them in the dashboard under Settings > Webhooks).
  4. If the client does not complete the intake, the chase engine sends automatic follow-up emails (and optionally SMS) on the schedule you specified.
  5. When all required items are submitted, the intake status transitions to completed and a final webhook fires.

5. Check status

Via MCP (in your agent):

Call: get_intake_status
Args: { "intake_id": "in_8f3kQmR2" }

Via REST:

bash
curl https://api.briefgate.dev/v1/intakes/in_8f3kQmR2/status \
  -H "Authorization: Bearer bg_live_xxxxx"

Both return the completion percentage, per-item statuses, and a timeline of chase emails sent so far.


6. Get results when complete

Via MCP:

Call: get_intake_results
Args: { "intake_id": "in_8f3kQmR2" }

Via REST:

bash
curl https://api.briefgate.dev/v1/intakes/in_8f3kQmR2/results \
  -H "Authorization: Bearer bg_live_xxxxx"

The response contains typed, ready-to-use data:


Next steps

Topic Document
Full reference for all 7 MCP tools mcp.md
All 11 item types and their constraints item-types.md
REST API, webhooks, and authentication rest-api.md