Agent-native client intake

Your agent built the site.
Stop waiting for the brief.

Coding agents ship websites in an afternoon — then stall for two weeks waiting on logos, copy, and credentials. BriefGate lets your agent declare what it needs, sends a branded portal to the client, and chases them until everything arrives. The agent calls get_intake_results() and keeps building.

MCP + REST EU data residency Free to start
Web pro Kramolišová Finance
portal · in_8f3k
in progress
2 of 7 items complete
Opening hours pending
Photos (5–10) pending
Google Analytics ID pending
WordPress credentials pending
Brand colors pending
Workflow

Four steps, zero email threads

The agent does the declaring. BriefGate does the chasing. You get typed data back.

01

Agent declares

Claude Code calls define_intake() with a typed list of items: logo, copy, credentials, structured data.

02

Client gets a portal

An email lands in the client's inbox with a magic link — no password, no account. A branded portal guides them through each item with in-place validation.

03

Chase engine runs

BriefGate reminds the client at T+2d, T+5d, T+9d — with quiet hours and only listing what's still missing. The "bad guy" is the robot, not you.

04

Agent retrieves and ships

Webhook fires on intake.completed. Agent calls get_intake_results() and gets typed data, signed file URLs, and decrypted credentials — ready to use.

Claude Code — briefgate MCP
# Agent defines what it needs
define_intake({
  project_name: "Kramolišová Finance",
  client: { email: "michaela@finance.cz" },
  items: [
    { key: "logo", type: "image",
      constraints: { min_width: 512 } },
    { key: "wp_admin", type: "secret" },
    { key: "opening_hours", type: "structured",
      schema: { properties: { mon_fri: {type:"string"} } } }
  ]
})

# → intake created, client emailed
{
  intake_id: "in_8f3k",
  portal_url: "https://p.briefgate.dev/8f3k",
  status: "sent"
}

# Later: webhook fires → agent retrieves
get_intake_results("in_8f3k")
# → logo url, typed opening hours,
#    one-time secret token  ✓
MCP-first

The agent stays in flow.
No context switching.

BriefGate ships as an MCP server. Claude Code calls define_intake the same way it reads a file or calls an API. The full conversation context stays intact — no tab switching, no email threads to summarize later.

Every MCP tool maps to a REST endpoint too, so CI pipelines, other agents, and custom scripts all work without MCP.

MCP reference REST API Item types
Agent-first design

Built for the way agents actually work

Content Snare built a great human-first tool. We built the agent-first counterpart — typed schemas, secrets vault, revision flows, and webhooks as first-class features.

11 typed item types

Text, image, file_list, color_list, select, boolean, url, structured (JSON Schema), and secret. The agent gets data it can use directly — not raw strings to parse from a PDF export.

Secrets vault

Client's WordPress admin, Stripe keys, API tokens — encrypted end-to-end with libsodium sealed box before they hit the database. One-time reveal via get_intake_results(). Never logged.

Chase engine — you stay clean

Default schedule: T+2d, T+5d, T+9d, then weekly. Quiet hours (8–19 local time). The reminder robot never mentions you — it's "Radim needs a few more items," not "I've emailed you three times."

Webhooks + revision loop

Register item.submitted and intake.completed webhooks. When a logo is blurry, call request_revision() with a note — client is notified, resubmits, webhook fires again.

Machine-readable pricing

Agents can read the tier limits themselves: GET /pricing.json (no auth). No scraping the landing page. The API enforces the same numbers, so there's no drift.

Branded portal — zero BriefGate branding

On Solo and Agency, the client sees your logo, your colors, your sender name. They never see "BriefGate." Magic link, no registration, mobile-first, CZ/EN/DE languages.

Pricing

Start free. Pay when it ships.

Free tier handles one real project — enough to see the value. Blended ARPU ~$39; 51 paying customers = $2k MRR.

Free
$0/mo
  • 1 active intake
  • 10 items per intake
  • 1 GB storage
  • MCP + REST + webhooks
  • 60 req/h
  • Secrets vault
  • Custom branding
Most popular
Solo
$29/mo
or $23.20/mo billed annually
  • 15 active intakes
  • Unlimited items per intake
  • 25 GB storage
  • Secrets vault
  • Custom branding
  • Item revisions
  • 600 req/h · email support
Agency
$79/mo
or $63.20/mo billed annually
  • 60 active intakes
  • 3 seats (+$15/seat)
  • 100 GB storage
  • SMS reminders
  • Custom portal domain
  • Custom sending domain
  • 3,000 req/h · priority support

Annual billing saves 20%. Add-ons: SMS credits $5/50 messages · extra 50 GB $5/mo · extra Agency seat $15/mo

Questions

Frequently asked

Does my client need to create an account?
No. The client receives an email with a magic link — one click opens their portal. No password, no registration. The session lasts 14 days so they can return later.
Can I use BriefGate without Claude Code?
Yes. Every MCP tool has a REST equivalent. Use POST /v1/intakes from any language, CI pipeline, or agent framework. Cursor, Codex, and custom agent loops all work over REST without the MCP server.
How are secrets (passwords, API keys) handled?
Secret items are encrypted with libsodium sealed box before the value ever reaches the database. Even a full DB dump reveals only ciphertext. The agent retrieves a one-time token via get_intake_results() and calls GET /v1/secrets/:token to decrypt — after which the token is invalidated. Secrets auto-expire after 30 days. Available on Solo and Agency.
Where is my data stored?
Everything is in the EU. Application servers run on Hetzner (Nuremberg/Falkenstein). Files are stored in Cloudflare R2 with EU jurisdiction policy. No data leaves Europe. A DPA (Data Processing Agreement) is available in account settings.
What if my agent calls define_intake in a retry loop?
Pass an Idempotency-Key header (or the idempotency_key metadata field in MCP). BriefGate deduplicates on that key — a retry returns the original response without creating a second intake or sending a second email. Rate limits also protect against runaway agent loops.
How does BriefGate compare to Content Snare?
Content Snare is excellent for human-led onboarding workflows. BriefGate is the agent-first alternative: define_intake() in Claude Code, typed results via get_intake_results(), secrets vault with one-time reveal, and webhooks as first-class events — none of which Content Snare offers. See the full comparison.
Early access

Ship the project.
Stop waiting for the brief.

The hosted API is not open for sign-ups yet. Leave your email and you will hear from me the day it is, with the first accounts going to people on this list. The docs are already up if you want to read the MCP tool surface first.

One email when it opens. Nothing else, and no sharing with anyone.