What is BriefGate?

BriefGate is a client intake platform. It asks a client for the files, information, structured answers and credentials a project needs, and hands the answers back to whoever is running the project — from the dashboard in your browser, or through an AI coding agent over MCP or REST.

The problem

A project — built by hand or by an AI coding agent — can move fast right up until it needs something from the client.

Not because the work is hard. Because the logo is in someone's Dropbox, the opening hours are in someone's head, and the WordPress password is in an email nobody wants to forward. There is no good way to ask a non-technical client for any of it, no way to chase them when they forget, and no way to tell whether what came back is usable.

That gap is the whole product. Everything below exists to close it.

Two ways in

Every intake ends up in the same place regardless of how it started: a portal the client fills in, a chase engine that follows up automatically, and typed results at the end. What differs is who defines the intake and reads the results.

From the dashboard — no code

Sign in at https://app.briefgate.dev/app and run the whole thing by hand:

This path never touches MCP or the REST API. It is the whole product for an account that never writes a line of code against BriefGate.

From an AI coding agent

1. The agent declares what it needs.

Through the MCP tool define_intake, or POST /v1/intakes over REST. Each item has a key the agent will read it back by, a label the client will read, a type, and optional constraints:

json
{
  "project_name": "Bella Cucina website",
  "client": { "email": "owner@bellacucina.cz", "name": "Marek", "language": "cs" },
  "items": [
    { "key": "logo", "type": "image", "label": "Company logo",
      "constraints": { "formats": ["svg", "png"], "min_width": 512 } },
    { "key": "opening_hours", "type": "structured", "label": "Opening hours",
      "schema": { "type": "object", "properties": {
        "mon_fri": { "type": "string" }, "sat": { "type": "string" } } } },
    { "key": "wp_admin", "type": "secret", "label": "WordPress admin access" }
  ]
}

2. The agent gets typed data back.

A webhook fires, or the agent calls get_intake_results:

json
{
  "intake_id": "in_01J9Z8X",
  "status": "completed",
  "progress": { "submitted": 3, "total": 3 },
  "missing": [],
  "results": {
    "logo": { "url": "https://…", "filename": "logo.svg", "checksum_sha256": "…" },
    "opening_hours": { "mon_fri": "11:00–22:00", "sat": "12:00–23:00" },
    "wp_admin": { "value": "…", "one_time": true }
  }
}

File URLs with checksums. Structured objects, validated against the schema the agent declared. Secrets released once, to an API key carrying the right scope, with the reveal written to an audit log. And missing, naming anything still outstanding, so the agent can decide whether it has enough to keep going.

3. The agent continues building.

Every MCP tool has a REST equivalent, so a custom agent loop in any language works too. Creating custom templates and inviting teammates are dashboard-only actions — an agent authenticated with just an API key cannot do either.

What happens in between, either way

The client gets a portal, not a form to figure out.

An email with a magic link. One click opens a branded page in their own language, listing what is still needed and what is already done. No account, no password, no registration. The session lasts 14 days, so they can start on a phone and finish on a laptop.

The portal never mentions agents, MCP, or APIs, and it looks the same whether the intake was defined by hand in the dashboard or by an agent. As far as the client is concerned, someone building their project needs six things from them.

BriefGate chases them.

On a schedule you or the agent chose, respecting quiet hours, stopping the moment an item arrives and stopping permanently if the address bounces. After the last reminder the intake is marked stalled and handed back, rather than nagging forever.

Who it is for

How it differs from a form builder

A form builder is designed for a human to build a form and a human to read the answers. BriefGate supports that workflow too, but adds a second one: an agent can declare the requirement and consume the result without a human in the loop at either end.

That second workflow is why the items are typed, why the API response is typed JSON rather than a spreadsheet export, why there is a missing array, why repeated calls are idempotent, and why webhooks exist. The client-facing half stays the same either way: the client sees a page asking for six things, and nothing about how it got there.

BriefGate also collects credentials, which a form builder should not be asked to do. A secret item is encrypted on the server on receipt, released once, and never rendered on any screen — see Security.

What it does not do

It is not a CRM, a project manager, an invoicing tool or a contract system. It does one thing: get the missing information from a client to whoever needs it. Anything else on that list would make it worse at that.

Start here