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.
- Zavolejte
define_intakes otypovanými položkami, které potřebujete (viz tabulka typů položek odkazovaná u každého nástroje níže). - Pollujte
get_intake_status. To, že položka zůstávápending, nebo že sběr podkladů zůstávásentčiin_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žijtefollow_upv odpovědidefine_intake, nebo zaregistrovaný webhook. - Jakmile jsou položky odeslané, zavolejte
get_intake_resultspro otypované hodnoty. Polemissinguvádí, co ještě chybí — ověřte ho, než předpokládáte, že je sběr podkladů hotový. - Pokud je odeslaná hodnota špatně nebo neúplná, zavolejte
request_revisions poznámkou, co opravit, místo abyste se klienta ptali znovu mimo BriefGate. - Položky typu
secret(hesla, API klíče) se vrací přesget_intake_resultsjednou: nešifrovaná hodnotavalueje 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
{
"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ěď
{
"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.
{
"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ěď
{
"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:
- Obrázky a soubory —
urlje podepsaná adresa s platností 24 hodin. Stáhněte si soubor včas, nebo si vyžádejte výsledky znovu a dostanete čerstvou adresu. - Přístupy — pole
valueobsahuje dešifrovaný text jen při prvním volání (first_reveal: true). Při všech dalších už tam není. Uložte si hodnotu okamžitě. Automaticky propadá po 30 dnech. API klíč musí mít scopesecrets:readneboadmin.
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
{
"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ěď
{
"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
{
"intake_id": "in_8f3kQmR2",
"channel": "email"
}Odpověď
{
"intake_id": "in_8f3kQmR2",
"channel": "email",
"sent_at": "2024-03-22T08:15:00Z"
}Kdy tenhle nástroj použít
- Termín je zítra a klient na automatické e-maily nereagoval.
- Chcete poslat osobní pobídnutí mimo automatický rozvrh.
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ěď
{
"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ů
{
"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ěď
{
"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
{
"intake_id": "in_8f3kQmR2",
"item_key": "logo",
"constraints": {
"formats": ["svg", "png", "jpg"],
"min_width": 256
}
}Odpověď
{
"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:
{
"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
{
"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
{
"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
{
"intake_id": "in_8f3kQmR2",
"action": "reinstate",
"email": "owner@bellanapoli.com"
}Odpověď
{
"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
{
"action": "create",
"url": "https://yourapp.com/webhooks/briefgate",
"events": ["item.submitted", "intake.completed", "intake.stalled"]
}Odpověď (create)
{
"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)
{
"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ěď
{
"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ěď
{
"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:
- 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.
- Zavolejte
loginznovu — 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:
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:
{
"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.