Přehled MCP nástrojů

BriefGate běží jako MCP server, takže coding agenti mohou řídit sběr podkladů, aniž by opustili svůj kontext. Všech 13 nástrojů odpovídá 1:1 REST endpointům pod https://api.briefgate.dev/v1/. Připojíte ho bez kopírování klíče — přes hostovaný OAuth nebo lokální přihlášení přes zařízení — nebo s API klíčem pro CI a skripty; všechny čtyři varianty jsou v quickstart.md. login a logout jsou dva další, čistě lokální pomocníky, dostupné jen když balíček spouštíte přes npx — viz níže.


Kdy má agent BriefGate použít

Spouštěče. Sáhněte po těchto nástrojích, když je úkol zablokovaný na něčem, co dokáže dodat jen člověk mimo aktuální konverzaci: soubory (logo, fotky produktů, dokumenty), texty, brand podklady, strukturované odpovědi nebo přístupy/hesla — a ta osoba může odpovídat hodiny až dny, takže ji musí někdo upomínat podle rozvrhu, ne vy ručním pollováním.

Kdy ne. Nepoužívejte ho, když je informace už dostupná — v repu, dřív v konverzaci, nebo v dřívějším sběru podkladů BriefGate — nebo když člověk, se kterým právě mluvíte, umí odpovědět přímo. Portál a upomínky BriefGate jsou pro lidi, kteří v této konverzaci nejsou.

Postup.

  1. Zavolejte define_intake s otypovanými položkami, které potřebujete (viz tabulka typů položek odkazovaná u každého nástroje níže).
  2. Pollujte get_intake_status. To, že položka zůstává pending, nebo že sběr podkladů zůstává sent či in_progress, je normální stav, dokud BriefGate klienta upomíná podle nastaveného rozvrhu — není to chyba ani signál, že volání selhalo. Místo častého pollování využijte follow_up v odpovědi define_intake, nebo zaregistrovaný webhook.
  3. Jakmile jsou položky odeslané, zavolejte get_intake_results pro otypované hodnoty. Pole missing uvádí, co ještě chybí — ověřte ho, než předpokládáte, že je sběr podkladů hotový.
  4. Pokud je odeslaná hodnota špatně nebo neúplná, zavolejte request_revision s poznámkou, co opravit, místo abyste se klienta ptali znovu mimo BriefGate.
  5. Položky typu secret (hesla, API klíče) se vrací přes get_intake_results jednou: nešifrovaná hodnota value je přítomná jen při prvním úspěšném přečtení (first_reveal: true), při každém dalším chybí. Uložte si ji hned. Přístupy se šifrují na straně serveru při příjmu (libsodium sealed box) — ne end-to-end, ne zero-knowledge — viz security.md.

define_intake

Založí nový sběr podkladů a klientovi okamžitě pošle e-mail s odkazem na jeho portál.

Parametry

Parametr Typ Povinný Popis
project_name string Ano Název projektu srozumitelný člověku, zobrazuje se v portálu i ve všech e-mailech.
client.email string Ano E-mailová adresa klienta.
client.name string Ano Jméno klienta. Každý pozvánkový i upomínkový e-mail jím klienta oslovuje.
client.language string Ne Jazyk portálu a e-mailů: cs, sk, pl, de, es, en. Když ho vynecháte, použije se výchozí jazyk účtu, případně angličtina.
client.timezone string Ne IANA časové pásmo (např. Europe/Prague) pro plánování nočního klidu.
client.phone string Ne Telefonní číslo ve formátu E.164 (např. +420601123456).
client.also_notify array Ne Až 4 další lidé u klienta ({ email, name }), kteří dostanou stejný odkaz na portál i stejné upomínky jako hlavní kontakt (třeba dva jednatelé jedné firmy). Každý má vlastní e-mail; nikdo nevidí odpovědi ostatních.
email_copy object Ne Vaše vlastní invite_subject, invite_intro, reminder_subject, reminder_intro, které pro tenhle sběr podkladů přebijí vestavěný překlad. Zástupné symboly: {sender}, {project}, {client}, {count}, {minutes}, {due} — neznámý se odmítne, nevypíše se doslova.
items array Ano Seřazený seznam definic položek. Viz item-types.md.
items[].assignee string Ne client (výchozí), nebo owner. Položka owner je váš vlastní úkol — klient ji nevidí, nepřipomíná se a nedrží sběr podkladů otevřený. Viz item-types.md.
branding object Ne Přebití brandingu účtu pro tenhle sběr podkladů: logo_url, accent_color (hex, např. #1B2A4A), sender_name, reply_to.
template string Ne Slug šablony pro předvyplnění položek (např. "restaurant-website").
chase_schedule string Ne Jedna z hodnot default, gentle, aggressive, custom, off (výchozí default). default=T+2d, T+5d, T+9d, pak týdně. gentle=T+3d, T+8d, pak jednou za dva týdny. aggressive=T+1d, T+3d, T+5d, pak obden. custom=každých chase_interval chase_interval_unit. off=žádné automatické upomínky.
chase_interval integer Ne Interval upomínek pro chase_schedule: "custom". Bez něj upomíná custom každé 3 dny. S jiným rozvrhem se odmítne.
chase_interval_unit string Ne minutes, hours nebo days (výchozí days). Minimum 5 minut, maximum 90 dní.
respect_quiet_hours boolean Ne Držet upomínky v okně 8:00–19:00 místního času klienta (výchozí true).
max_reminders integer | string Ne Počet upomínek, než se sběr podkladů označí za zaseknutý a vrátí vám ho (1–1000, výchozí 3, nebo "unlimited" pro zrušení stropu).
chase_at_time string Ne Místní denní hodina upomínky ve formátu HH:MM. Vyžaduje chase_schedule: "custom" s intervalem v celých dnech a přebíjí noční klid.
due_date string Ne Datum podle ISO 8601. Zobrazuje se v portálu a v předmětu e-mailu.
auto_approve_hours integer Ne Počet hodin od odeslání, po kterých se položka automaticky schválí bez vaší kontroly (výchozí 72). Nastavením na 0 vyžadujete výslovné schválení vždy.
send boolean Ne false založí koncept, aniž by klientovi šel e-mail. Odeslat později můžete přes POST /v1/intakes/:id/send. Výchozí true.
retention object Ne { mode: "days"|"on_delivery", days?: number, anonymize?: boolean }. Výchozí: smazat 90 dní po intake.completed. U sběru podkladů s přístupy použijte mode: "on_delivery" — obsah zmizí zhruba 24 hodin po vašem volání get_intake_results.
folder_id string Ne Zařadí tenhle sběr podkladů do existující složky z list_folders, místo aby zůstal nezařazený. Složky seskupují sběry podkladů podle klienta nebo projektu — pro vracejícího se klienta použijte existující, místo abyste přes create_folder zakládali duplicitu.

Příklad — web restaurace

json
{
  "project_name": "Bella Napoli — Website",
  "client": {
    "email": "owner@bellanapoli.com",
    "name": "Marco Esposito",
    "language": "en"
  },
  "items": [
    {
      "key": "logo",
      "label": "Restaurant logo",
      "help": "SVG or PNG with transparent background, minimum 512px.",
      "type": "image",
      "required": true,
      "constraints": {
        "formats": ["svg", "png"],
        "min_width": 512,
        "transparent_background": true
      }
    },
    {
      "key": "brand_colors",
      "label": "Brand colors",
      "help": "Pick the primary and secondary brand colors.",
      "type": "color_list",
      "required": true
    },
    {
      "key": "hero_copy",
      "label": "Hero tagline",
      "type": "longtext",
      "required": true,
      "constraints": { "max_chars": 400 }
    },
    {
      "key": "has_existing_site",
      "label": "Do you have an existing website?",
      "type": "boolean",
      "required": true
    },
    {
      "key": "existing_site_url",
      "label": "Existing website URL",
      "help": "Only required if you answered Yes above.",
      "type": "url",
      "required": false
    },
    {
      "key": "platform",
      "label": "Preferred platform",
      "type": "select",
      "required": true,
      "options": [
        { "value": "wordpress", "label": "WordPress" },
        { "value": "webflow",   "label": "Webflow" },
        { "value": "custom",    "label": "Custom / I'm not sure" }
      ]
    },
    {
      "key": "cms_password",
      "label": "Admin credentials",
      "help": "Existing CMS admin login (if migrating). Stored encrypted, one-time reveal.",
      "type": "secret",
      "required": false
    },
    {
      "key": "opening_hours",
      "label": "Opening hours",
      "type": "structured",
      "required": true,
      "schema": {
        "type": "object",
        "required": ["mon_fri", "sat", "sun"],
        "properties": {
          "mon_fri": { "type": "string" },
          "sat":     { "type": "string" },
          "sun":     { "type": "string" }
        }
      }
    }
  ],
  "chase_schedule": "default"
}

Odpověď

json
{
  "intake_id": "in_8f3kQmR2",
  "portal_url": "https://p.briefgate.dev/8f3kqmr2",
  "status": "sent",
  "items": [
    { "key": "logo",       "status": "pending" },
    { "key": "brand_colors","status": "pending" }
  ],
  "follow_up": {
    "recommended": "schedule",
    "reason": "No active webhook endpoints are registered on this account.",
    "webhook": {
      "active_endpoints": 0,
      "events": ["item.submitted", "intake.completed"],
      "register_with": "manage_webhook"
    },
    "schedule": {
      "check_with": "get_intake_status",
      "every_hours": 24,
      "until": "2024-03-29T10:22:00Z"
    }
  }
}

follow_up napovídá, jak sledovat postup na sběru podkladů bez slepého pollování. recommended je "webhook", pokud už máte aktivní webhook endpoint pokrývající relevantní eventy, nebo "schedule" — jako výše — pokud ne. U "schedule" volejte get_intake_status každých follow_up.schedule.every_hours hodin až do follow_up.schedule.until; u "webhook" si ho místo pollování zaregistrujte přes manage_webhook (nebo využijte endpointy uvedené ve follow_up.webhook).


get_intake_status

Vrátí lehký snímek aktuálního stavu sběru podkladů: které položky jsou hotové, které čekají, a celou historii upomínek. Když potřebujete jen zkontrolovat postup, sáhněte po tomhle místo get_intake_results.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Hodnota intake_id, kterou vrátil define_intake.

Odpověď

progress.total počítá jen to, na co se čeká: prominutá položka i nevyplněná volitelná položka jsou mimo jmenovatel. Díky tomu je percent rovno 100 přesně ve chvíli, kdy se status změní na completed.

json
{
  "status": "in_progress",
  "due_date": "2024-04-01",
  "client_last_seen": "2024-03-16T14:05:33Z",
  "progress": {
    "submitted": 5,
    "total": 8,
    "outstanding": 3,
    "percent": 62
  },
  "items": [
    { "key": "logo",             "status": "approved",       "submitted_at": "2024-03-16T10:00:00Z", "label": "Restaurant logo" },
    { "key": "brand_colors",     "status": "approved",       "submitted_at": "2024-03-16T10:05:00Z", "label": "Brand colors" },
    { "key": "hero_copy",        "status": "needs_revision", "submitted_at": "2024-03-16T10:10:00Z", "label": "Hero tagline" },
    { "key": "has_existing_site","status": "approved",       "submitted_at": "2024-03-16T10:15:00Z", "label": "Do you have an existing website?" },
    { "key": "existing_site_url","status": "approved",       "submitted_at": "2024-03-16T10:15:00Z", "label": "Existing website URL" },
    { "key": "platform",         "status": "approved",       "submitted_at": "2024-03-16T10:20:00Z", "label": "Preferred platform" },
    { "key": "cms_password",     "status": "pending",        "submitted_at": null,                   "label": "Admin credentials" },
    { "key": "opening_hours",    "status": "pending",        "submitted_at": null,                   "label": "Opening hours" }
  ],
  "chases": [
    { "channel": "email", "sent_at": "2024-03-17T09:00:00Z", "status": "sent",      "attempt_no": 1 },
    { "channel": "email", "sent_at": "2024-03-20T09:00:00Z", "status": "sent",      "attempt_no": 2 },
    { "channel": "email", "sent_at": null,                   "status": "scheduled", "attempt_no": 3 }
  ]
}

Stavy položek

Stav Význam
pending Klient dosud neodeslal.
submitted Nahráno nebo vyplněno; čeká na kontrolu agentem nebo na automatické schválení.
needs_revision Agent si vyžádal opravu přes request_revision.
approved Přijato (buď výslovně, nebo automaticky po 72 hodinách).
waived Majitel účtu položku prominul — nikdy se neodešle a nepočítá se do progress.total.

get_intake_results

Vrátí otypovaný obsah všech schválených (nebo všech odeslaných) položek. Použijte po dokončení sběru podkladů, nebo průběžně s only_new: true, jak se položky schvalují.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Sběr podkladů, ze kterého se výsledky berou.
only_new boolean Ne S true vrátí jen položky schválené od posledního volání. Hodí se na průběžné zpracování.
include_pending boolean Ne S true vrátí i položky ve stavu submitted, které ještě nejsou schválené.

Odpověď

json
{
  "intake_id": "in_8f3kQmR2",
  "status": "completed",
  "progress": { "submitted": 8, "total": 8, "outstanding": 0, "percent": 100 },
  "missing": [],
  "results": {
    "logo": {
      "url": "https://files.briefgate.dev/in_8f3kQmR2/logo.png?token=sig_abc&expires=1710615600",
      "filename": "bella-napoli-logo.png",
      "mime": "image/png",
      "width": 1024,
      "height": 512,
      "size": 48210,
      "checksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8"
    },
    "brand_colors": ["#1B2A4A", "#E8E2D9", "#C8382E"],
    "hero_copy": "Since 1987, handcrafted Neapolitan pizza in the heart of the city. Come hungry, leave happy.",
    "has_existing_site": true,
    "existing_site_url": "https://old.bellanapoli.com",
    "platform": "wordpress",
    "cms_password": {
      "value": "admin:s3cr3tP@ssw0rd",
      "one_time": true,
      "first_reveal": true,
      "expires_at": "2024-04-15T10:22:00Z"
    },
    "opening_hours": {
      "mon_fri": "12:00-22:00",
      "sat": "12:00-23:00",
      "sun": "13:00-21:00"
    }
  },
  "meta": {
    "logo": { "type": "image", "status": "approved", "submitted_at": "2024-03-16T10:00:00Z" },
    "cms_password": { "type": "secret", "status": "approved", "submitted_at": "2024-03-16T10:15:00Z" }
  }
}

missing obsahuje klíče povinných klientských položek, které jsou pořád pending nebo needs_revision — hodí se ověřit dřív, než předpokládáte, že je sběr podkladů hotový. meta nese jeden záznam za každou položku vrácenou v results: její type, status, submitted_at, a u rozhodovací položky i decided_by.

Poznámky ke konkrétním typům:


request_revision

Označí položku jako needs_revision a pošle klientovi e-mail s vysvětlením, co je potřeba opravit. Na straně klienta se položka vrátí do pending a kolečko začne znovu.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Sběr podkladů, ve kterém položka je.
item_key string Ano Hodnota key položky k opravě (například "logo").
note string Ano Vysvětlení, které dostane klient. Buďte konkrétní.

Příklad

json
{
  "intake_id": "in_8f3kQmR2",
  "item_key": "logo",
  "note": "The logo appears to be exported at 320px. Please re-export at a minimum of 512px on the shortest side, ideally as an SVG vector file."
}

Odpověď

json
{
  "intake_id": "in_8f3kQmR2",
  "item_key": "logo",
  "status": "needs_revision",
  "client_notified": true
}

Klientovi přijde e-mail s vaší poznámkou a v portálu se mu daná položka zvýrazní. Po opětovném odeslání se položka vrátí do stavu submitted a 72hodinová lhůta pro automatické schválení začne běžet znovu.


send_chase

Ručně odešle upomínku mimo automatický rozvrh. Hodí se na osobní pobídnutí před termínem.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Sběr podkladů, který se má upomenout.
channel string Ne "email". Výchozí je "email".

Příklad

json
{
  "intake_id": "in_8f3kQmR2",
  "channel": "email"
}

Odpověď

json
{
  "intake_id": "in_8f3kQmR2",
  "channel": "email",
  "sent_at": "2024-03-22T08:15:00Z"
}

Kdy tenhle nástroj použít


list_intakes

Vrátí stránkovaný seznam sběrů podkladů, volitelně filtrovaný podle stavu nebo e-mailu klienta. Hodí se na stavbu dashboardů nebo na kontrolu, který projekt potřebuje pozornost.

Parametry

Parametr Typ Povinný Popis
status string Ne Filtr podle stavu sběru podkladů: draft, sent, in_progress, completed, archived.
client_email string Ne Filtr na sběry podkladů konkrétního klienta.
folder_id string Ne Filtr podle složky, pomocí id z list_folders. Zadejte doslova "none" a uvidíte jen sběry podkladů bez složky.
q string Ne Fulltextové hledání: hledá podřetězec v názvu projektu, jménu klienta nebo jeho e-mailu.
limit integer Ne Počet výsledků na stránku (výchozí 20, maximum 100).
offset integer Ne Posun pro stránkování (výchozí 0).

Odpověď

json
{
  "intakes": [
    {
      "intake_id": "in_8f3kQmR2",
      "project_name": "Bella Napoli — Website",
      "status": "in_progress",
      "client": {
        "email": "owner@bellanapoli.com",
        "name": "Marco Esposito"
      },
      "portal_url": "https://p.briefgate.dev/8f3kqmr2",
      "created_at": "2024-03-15T10:22:00Z",
      "progress": { "submitted": 3, "total": 7 }
    },
    {
      "intake_id": "in_4p2nWxY7",
      "project_name": "Green Leaf Cafe — Rebrand",
      "status": "completed",
      "client": {
        "email": "ops@greenleafcafe.com",
        "name": "Priya Nair"
      },
      "portal_url": "https://p.briefgate.dev/4p2nwxy7",
      "created_at": "2024-03-10T09:00:00Z",
      "progress": { "submitted": 5, "total": 5 }
    }
  ],
  "total": 47,
  "limit": 20,
  "offset": 0
}

Každý sběr podkladů v poli má stejný snake_case tvar polí jako objekt jednotlivého sběru podkladů popsaný jinde v této dokumentaci, navíc s přehledem progress za daný sběr podkladů.


add_items

Přidá nové položky do už odeslaného sběru podkladů. Klientovi přijde upozornění, že něco přibylo. Použijte, když se rozsah rozroste poté, co je sběr podkladů živý.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Sběr podkladů, který se rozšiřuje.
items array Ano Pole definic položek ve stejném formátu jako u define_intake.

Příklad — doplnění požadavku na favicon po odeslání sběru podkladů

json
{
  "intake_id": "in_8f3kQmR2",
  "items": [
    {
      "key": "favicon",
      "label": "Favicon",
      "help": "A square icon at least 32x32px, ideally 512x512px. Used in browser tabs and bookmarks.",
      "type": "image",
      "required": true,
      "constraints": {
        "formats": ["png", "svg"],
        "min_width": 32,
        "min_height": 32
      }
    }
  ]
}

Odpověď

json
{
  "intake_id": "in_8f3kQmR2",
  "items_added": [
    { "key": "favicon", "status": "pending" }
  ]
}

Nová položka se klientovi v portálu objeví okamžitě.


update_item

Změní definici existující položky ve sběru podkladů — například zpřísní omezení, upraví popisek nebo nápovědu, nebo dodatečně nastaví položku jako povinnou. key položky změnit nejde; pokud potřebujete jiný klíč, přidejte novou položku přes add_items a starou nechte být, nebo ji zrušte.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Sběr podkladů obsahující položku.
item_key string Ano key položky, kterou upravujete.
type string Ne Nový typ položky. Viz item-types.md.
label string Ne Nový popisek zobrazený klientovi.
help string Ne Nový text nápovědy.
required boolean Ne Jestli je položka povinná.
constraints object Ne Nový objekt omezení, nahrazuje předchozí.
options array Ne Nové pole {value, label} pro položky select/multiselect.
pattern string Ne Nový regulární výraz pro položky typu text.
discard_submitted_value boolean Ne Viz „Konflikt s existující odpovědí" níže. Výchozí false.

Musíte zadat aspoň jedno pole kromě intake_id a item_key. Ani schema, ani owner_note tímto nástrojem nastavit nejde — s kterýmkoli z nich volání skončí chybou. assignee tímto nástrojem taky změnit nejde — pro přesun mezi client a owner položku odeberte a znovu přidejte přes add_items.

Příklad — rozšíření omezení obrázku po stížnosti klienta

json
{
  "intake_id": "in_8f3kQmR2",
  "item_key": "logo",
  "constraints": {
    "formats": ["svg", "png", "jpg"],
    "min_width": 256
  }
}

Odpověď

json
{
  "item": {
    "key": "logo",
    "type": "image",
    "assignee": "client",
    "label": "Restaurant logo",
    "help": "SVG or PNG with transparent background, minimum 512px.",
    "required": true,
    "status": "pending",
    "value": null,
    "constraints": {
      "formats": ["svg", "png", "jpg"],
      "min_width": 256
    },
    "options": null,
    "pattern": null,
    "submitted_at": null,
    "approved_at": null,
    "revision_note": null,
    "revision_count": 0,
    "waiver": null,
    "client_note": null,
    "owner_note": null
  }
}

Konflikt s existující odpovědí

Pokud už klient položku odpověděl a vaše změna by tuhle odpověď podle nové definice znehodnotila (například snížení max_chars pod délku už odeslaného textu, nebo odebrání možnosti, kterou klient už vybral), volání skončí chybou 409 s kódem item_answer_would_be_discarded — místo aby klientovu odpověď potichu zahodilo:

json
{
  "error": {
    "code": "item_answer_would_be_discarded",
    "message": "Changing constraints on \"logo\" would invalidate the client's submitted value."
  }
}

Pošlete discard_submitted_value: true, aby se změna přesto provedla. V tom případě se položka vrátí do stavu pending a odpověď obsahuje "discarded_submitted_value": true vedle item.


update_intake

Upraví sběr podkladů, který je už sent — dřív jedinou alternativou bylo ho smazat a zavolat define_intake znovu, což klientovi pošle novou pozvánku a druhý odkaz. Funguje na sběru podkladů v jakémkoli stavu kromě archived; změna rytmu upomínání u sběru podkladů sent nebo in_progress naplánuje rozvrh znovu od teď a zruší upomínku, která ještě čekala podle starého nastavení. Tímhle nástrojem nejde změnit klientovu e-mailovou adresu — je na ni navázaný odkaz do portálu i magic token. Na přidání, odebrání nebo obnovení adresy použijte manage_recipients.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano Sběr podkladů, který upravujete.
project_name string Ne
due_date string | null Ne YYYY-MM-DD. null ho smaže.
chase_schedule string Ne default, gentle, aggressive, custom, off.
chase_interval integer Ne Má smysl jen s chase_schedule: "custom". Kombinuje se s chase_interval_unit.
chase_interval_unit string Ne minutes, hours nebo days (výchozí days).
chase_at_time string | null Ne HH:MM místního času. Vyžaduje interval měřený v celých dnech. null ho smaže.
max_reminders integer | "unlimited" Ne Zvýšení nad počet už odeslaných upomínek zaseknutý sběr podkladů odblokuje a upomínání pokračuje.
respect_quiet_hours boolean Ne
client.name string Ne
client.phone string | null Ne E.164, např. +420601123456. null ho smaže.
client.language string Ne cs, sk, pl, de, es, en.
client.timezone string Ne IANA časové pásmo, např. Europe/Prague. Řídí se jím respect_quiet_hours i chase_at_time — jeho změna taky naplánuje rozvrh znovu.
folder_id string | null Ne Přesune tenhle sběr podkladů do jiné složky, pomocí id z list_folders. null ho ze složky vyřadí. Rozvrh upomínek tím nijak neovlivníte.

Bez client.email — viz výše. Musíte zadat aspoň jedno pole kromě intake_id. Vynechané pole zůstává beze změny; null je přijímaný jen tam, kde to tabulka výše říká.

Příklad — přepnutí zaseknutého sběru podkladů na rychlejší rytmus bez stropu

json
{
  "intake_id": "in_8f3kQmR2",
  "chase_schedule": "custom",
  "chase_interval": 6,
  "chase_interval_unit": "hours",
  "max_reminders": "unlimited"
}

Příklad — oprava klientova jména a časového pásma

json
{
  "intake_id": "in_8f3kQmR2",
  "client": {
    "name": "Marco Esposito",
    "timezone": "Europe/Rome"
  }
}

Odpověď je { "intake": { ... } }, stejný objekt, jaký vrací sesterské čtecí nástroje kolem get_intake_status.

Chyby

Kód Význam
intake_archived (409) Sběr podkladů je archivovaný a nejde upravit.
400 Nebylo zadané žádné pole kromě intake_id.
422 Hodnota některého pole je neplatná — např. chase_at_time proti intervalu, který není v celých dnech.

manage_recipients

Přidá, odebere nebo obnoví jednoho z lidí, kterým je sběr podkladů adresovaný. Sběr podkladů může mít až pět příjemců sdílejících jeden portálový odkaz — hlavního klienta plus další čtyři (třeba dva jednatele téže firmy). Obaluje POST/DELETE /v1/intakes/:id/recipients a endpoint na obnovení; viz rest-api.md pro REST kontrakt pod tím.

Parametry

Parametr Typ Povinný Popis
intake_id string Ano
action string Ano add, remove, nebo reinstate.
email string Ano Adresa, kterou přidáváte, odebíráte nebo obnovujete.
name string Ne Použije se jen s action: "add".

add — zahrne adresu do stejného portálového odkazu a budoucích upomínek jako hlavního klienta. Samo o sobě nic neodešle; na okamžité oslovení nové osoby použijte send_chase.

remove — odebere další adresu. Hlavního klienta takhle odebrat nejde — na změnu ostatních polí použijte update_intake, nebo sběr podkladů založte znovu přes define_intake.

reinstate — pro odraz, který byl omylem: adresát e-mail přesto dostal, nebo se schránka mezitím opravila. Zruší příznak odrazu na adrese, kterou umlčelo selhání doručení. Pokud předtím nebylo koho upomínat, automatické upomínky se tímhle voláním obnoví.

Příklad

json
{
  "intake_id": "in_8f3kQmR2",
  "action": "reinstate",
  "email": "owner@bellanapoli.com"
}

Odpověď

json
{
  "email": "owner@bellanapoli.com",
  "bounced_at": null,
  "still_chasing": true
}

(add a remove vrací tvary popsané u svých REST endpointů — also_notify u add, prázdné tělo u remove.)

Chyby

Kód Význam
recipient_exists (409) add: tahle adresa už na sběru podkladů je.
400 (recipient_limit) add: sběr podkladů už má pět příjemců.
recipient_is_primary (400) remove: tahle adresa je hlavní klient.
404 remove/reinstate: na sběru podkladů takový příjemce není.
recipient_not_bounced (409) reinstate: tahle adresa se nikdy neodrazila.

manage_webhook

Zakládá, vypisuje nebo maže webhook endpointy pro váš účet. Webhooky umožňují reagovat na eventy sběru podkladů (odeslání položky, dokončení sběru, odražená upomínka a podobně) bez pollování. Podrobnosti o doručování, ověření podpisu a opakování najdete ve webhooks.md.

Parametry

Parametr Typ Povinný Popis
action string Ano "create", "list", nebo "delete".
url string Pro create HTTPS endpoint, který přijímá webhook POST požadavky.
events array Pro create Podmnožina item.submitted, intake.completed, client.viewed, chase.bounced, intake.stalled, intake.overdue.
format string Ne "raw" (výchozí, podepsaná obálka BriefGate), "slack", nebo "discord".
webhook_id string Pro delete Endpoint, který se má odebrat.

Pro action: "create" jsou url i events povinné.

Příklad — registrace endpointu

json
{
  "action": "create",
  "url": "https://yourapp.com/webhooks/briefgate",
  "events": ["item.submitted", "intake.completed", "intake.stalled"]
}

Odpověď (create)

json
{
  "id": "whe_a1b2c3d4e5f6",
  "url": "https://yourapp.com/webhooks/briefgate",
  "events": ["item.submitted", "intake.completed", "intake.stalled"],
  "format": "raw",
  "active": true,
  "created_at": "2024-03-22T08:15:00Z",
  "secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

secret se zobrazí přesně jednou, při vytvoření — uložte si ho hned, protože ho potřebujete k ověřování podpisů a už se znovu nevrátí (ani přes action: "list").

Odpověď (list)

json
{
  "webhooks": [
    {
      "id": "whe_a1b2c3d4e5f6",
      "url": "https://yourapp.com/webhooks/briefgate",
      "events": ["item.submitted", "intake.completed", "intake.stalled"],
      "format": "raw",
      "active": true,
      "created_at": "2024-03-22T08:15:00Z"
    }
  ]
}

U endpointů s formátem slack/discord je url v seznamu maskované, u formátu raw se zobrazí celé.

Odpověď (delete)

action: "delete" nevrací žádné tělo (na REST úrovni 204 No Content).


list_folders

Vypíše složky ve vašem účtu, které slouží k seskupování sběrů podkladů podle klienta nebo projektu. Zavolejte tohle před create_folder nebo než nastavíte folder_id u define_intake, update_intake nebo list_intakes — pro vracejícího se klienta použijte existující složku, místo abyste zakládali duplicitu.

Parametry

Žádné.

Odpověď

json
{
  "folders": [
    {
      "id": "fld_a1b2c3d4",
      "name": "Bella Napoli",
      "sort_order": 0,
      "intake_count": 3,
      "created_at": "2024-03-10T09:00:00Z"
    }
  ]
}

create_folder

Založí novou složku pro seskupení sběrů podkladů, například jednu na klienta. Nejdřív zavolejte list_folders a použijte odpovídající složku — novou zakládejte, jen když žádná existující nesedí.

Parametry

Parametr Typ Povinný Popis
name string Ano Název složky, například jméno klienta nebo projektu. Musí být v rámci účtu jedinečný.

Odpověď

json
{
  "id": "fld_a1b2c3d4",
  "name": "Bella Napoli",
  "sort_order": 0,
  "intake_count": 0,
  "created_at": "2024-03-22T08:15:00Z"
}

Chyby

Kód Význam
folder_exists (409) Složka s tímhle názvem už existuje — najděte ji přes list_folders.

login

Přihlásí bez vkládání API klíče — obdoba varianty 1 v quickstart.md pro lokální balíček. Není k dispozici při připojení přes hostovaný endpoint (mcp.briefgate.dev) — tam už samotné připojení klienta spustí OAuth. Bez argumentů.

Je to dvoufázový nástroj, protože schválení může trvat minuty — déle, než by mělo jedno volání nástroje čekat:

  1. První volání spustí přihlášení přes zařízení a hned vrátí krátký kód a URL. Řekněte uživateli, ať URL otevře a kód potvrdí; kde to jde, otevře se prohlížeč i automaticky.
  2. Zavolejte login znovu — kdykoli, nebo jakmile uživatel řekne, že schválil — a zkontrolujte stav. Dokud se ještě čeká, odpověď to řekne; jakmile je schváleno, stejné volání ohlásí úspěch a klíč se uloží do ~/.briefgate/credentials.json. Restart není potřeba — hned další volání nástroje už je přihlášené.

Pokud je API klíč už nastavený přes --api-key nebo BRIEFGATE_API_KEY, nemá volání žádný účinek a jen to řekne místo spuštění celého procesu — takový klíč má vždy přednost před uloženým.

Parametry: žádné.


logout

Odstraní API klíč, který si pro tenhle BriefGate server lokálně uložil login, a zkusí ho zneplatnit i na serveru (volání DELETE /v1/keys/current tím samým klíčem). Není k dispozici při připojení přes hostovaný endpoint. Bez argumentů.

Pokud se zneplatnění na serveru nepovede (bez sítě, API nedostupné), lokální kopie se přesto smaže; odpověď to uvede a odkáže na dashboard BriefGate, kde jde klíč zneplatnit ručně.

Parametry: žádné.


Idempotence

Kvůli síťové chybě se define_intake může zavolat dvakrát, což by klientovi poslalo dva e-maily a založilo dva sběry podkladů. MCP balíček si sám odvodí stabilní idempotenční klíč z project_name, client.email a hashe pole items — opakované volání se stejnými argumenty vrátí původní odpověď a druhý sběr podkladů nevznikne.

Při přímém volání REST API pošlete hlavičku Idempotency-Key:

bash
curl -X POST https://api.briefgate.dev/v1/intakes \
  -H "Authorization: Bearer bg_live_xxxxx" \
  -H "Idempotency-Key: bella-napoli-2024-01" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

Když už klíč jednou viděl, vrátí BriefGate původní odpověď beze změny (HTTP 200, ne 201). Klíče propadají po 24 hodinách.


Jak to vyzkoušet bez odeslání e-mailu klientovi

Zadejte define_intake s "send": false a vznikne koncept bez e-mailu klientovi — viz parametr send výše. Nic se neodešle, dokud nezavoláte POST /v1/intakes/:id/send přes REST; pro pozdější odeslání konceptu MCP nástroj neexistuje. Dokud je sběr podkladů jen koncept, GET /v1/intakes/preview ukáže přesný předmět a jméno odesílatele, které klient uvidí, podle aktuálního brandingu účtu — je jen pro dashboardovou session, takže ho zkontrolujte tam, ne z agenta.


Ukázka volání nástroje v Claude Code

Když Claude Code zavolá nástroj BriefGate, vypadá to pod kapotou takhle:

json
{
  "type": "tool_use",
  "id": "toolu_01XyzAbc",
  "name": "mcp__briefgate__define_intake",
  "input": {
    "project_name": "Bella Napoli — Website",
    "client": {
      "email": "owner@bellanapoli.com",
      "name": "Marco Esposito",
      "language": "en"
    },
    "items": [
      {
        "key": "logo",
        "label": "Restaurant logo",
        "type": "image",
        "required": true,
        "constraints": {
          "formats": ["svg", "png"],
          "min_width": 512
        }
      }
    ],
    "chase_schedule": "default"
  }
}

Název nástroje nese prefix mcp__ a jméno MCP serveru (mcp__briefgate__). Serializaci do JSON i přenos si Claude Code obstará sám — vy jen přirozeným jazykem popíšete, co potřebujete, a volání sestaví agent.