Podklady od klienta pro Claude Code: sbírejte materiály bez opuštění agenta
Problém
Claude Code umí postavit kompletní web za jedno odpoledne. Pak narazí na zeď: klient neposlal logo, text hero sekce ani přihlašovací údaje do WordPress adminu. Agent čeká. Vy čekáte. Pošlete klientovi e-mail s upomínkou. Uplynou dva týdny. Klient pošle rozmazaný JPG široký 200 pixelů.
Tohle je to úzké hrdlo: ne samotná stavba, ale sbírání podkladů. Vývojáři ztrácí víc času honěním materiálů než psaním kódu.
Řešení
BriefGate MCP. Claude Code zavolá define_intake() se seznamem toho, co potřebuje. BriefGate klientovi pošle e-mailem odkaz na portál s vaším brandingem. Klient nahraje soubory, vyplní text a odešle přihlašovací údaje — vše v přehledném webovém rozhraní navrženém pro netechnické lidi. BriefGate ho automaticky upomíná podle rozvrhu, který si nastavíte.
Jakmile je vše odesláno, Claude Code zavolá get_intake_results() a naváže přesně tam, kde skončil — typovaná data, podepsané URL adresy souborů, strukturované objekty, jednorázově odhalené přihlašovací údaje — připravené k použití bez jakéhokoli parsování nebo transformace.
Nastavení
Dva příkazy:
npm install -g @briefgate/mcp
claude mcp add briefgate -- briefgate-mcp --api-key bg_live_xxxxxAPI klíč získáte na https://app.briefgate.dev/app. MCP server propojí Claude Code s BriefGate API. Po nastavení jsou nástroje jako define_intake, get_intake_results, get_intake_status, request_revision a send_chase dostupné v každé session Claude Code.
Nechcete vkládat klíč přímo? claude mcp add briefgate -- npx -y @briefgate/mcp následované npx -y @briefgate/mcp login vás přihlásí přes dashboard místo toho, nebo se připojte přímo k hostovanému endpointu příkazem claude mcp add --transport http briefgate https://mcp.briefgate.dev/mcp (pak /mcp → briefgate → Authenticate přímo v Claude Code) pro přihlášení přes OAuth. Viz Rychlý start.
Přidání do CLAUDE.md
Do CLAUDE.md vašeho projektu vložte tento úryvek, aby agent věděl, kdy a jak BriefGate používat:
## Sběr podkladů od klienta
Když potřebuješ od klienta materiál, použij BriefGate MCP nástroje:
1. Zavolej define_intake s items[] popisujícím, co je potřeba
2. Klientovi se automaticky pošle e-mail s odkazem na portál
3. Stav ověř přes get_intake_status, nebo počkej na webhook intake.completed
4. Zavolej get_intake_results, aby ses dostal k typovaným datům a URL souborů
5. Pro přihlašovací údaje (hesla, API klíče) použij type: "secret" — jsou šifrované
Klienta se nikdy neptej na podklady přímo v konverzaci — použij define_intake,
aby bylo vše sledované a automaticky upomínané.Kompletní příklad session
Takhle vypadá session Claude Code s nasazeným BriefGate:
Agent: „Mám hotovou architekturu webu. Abych mohl pokračovat ve stavbě, potřebuju klientovo logo, text hero sekce a Google Analytics ID. Zakládám BriefGate intake."
Agent zavolá define_intake:
{
"project_name": "Bella Cucina Restaurant Website",
"client": {
"email": "marco@bellacucina.cz",
"name": "Marco",
"language": "en"
},
"items": [
{"key": "logo", "type": "image", "label": "Restaurant logo", "constraints": {"min_width": 512}},
{"key": "hero_copy", "type": "longtext", "label": "Homepage headline and intro text"},
{"key": "ga4_id", "type": "text", "label": "Google Analytics 4 Measurement ID", "required": false, "pattern": "^G-[A-Z0-9]+$"}
],
"chase_schedule": "default",
"branding": {"sender_name": "Radim"}
}(branding.sender_name je vlastní branding — tarif Solo a vyšší. Na Free se přijme a uloží, ale klient uvidí vestavěnou identitu odesílatele.)
Agent: „Intake založen. Marco dostane e-mail na marco@bellacucina.cz s odkazem na portál. Zatím budu pokračovat ve stavbě statické struktury a placeholder komponent. Vrátím se, jakmile podklady dorazí."
[Agent pokračuje ve stavbě. Chase engine pošle upomínku v T+2d. Marco odešle logo a text v T+3d. Vystřelí webhook intake.completed.]
Agent zavolá get_intake_results:
{
"status": "completed",
"items": [
{
"key": "logo",
"type": "image",
"status": "submitted",
"value": {
"url": "https://r2.briefgate.dev/signed/...",
"filename": "bellacucina-logo.svg",
"width": 1024,
"height": 512,
"mime_type": "image/svg+xml"
}
},
{
"key": "hero_copy",
"type": "longtext",
"status": "submitted",
"value": "Authentic Italian cuisine in the heart of Prague..."
},
{
"key": "ga4_id",
"type": "text",
"status": "skipped"
}
]
}Agent: „Logo přijato — SVG, 1024×512. Text hero sekce je tu. GA4 ID přeskočeno (volitelné). Pokračuju v implementaci: umístím logo do hlavičky, naplním hero sekci textem, přeskočím analytics snippet."
Kontrola stavu bez čekání
Claude Code nemusí čekat jen na webhook — stav může kdykoli ověřit zavoláním get_intake_status:
{
"status": "in_progress",
"progress": {"total": 3, "submitted": 2, "outstanding": 1},
"items": [
{"key": "logo", "status": "approved"},
{"key": "hero_copy", "status": "submitted"},
{"key": "ga4_id", "status": "pending"}
]
}due_date u define_intake zobrazí klientovi termín v portálu i v pozvánce. chase_schedule: "default" ho upomíná v T+2d, T+5d, T+9d a pak jednou týdně, dokud intake nedokončí nebo rozvrh nevypnete — upomínky za agenta nikdy neposíláte vy, takže mezitím může pokračovat na jiné části projektu místo nečinného čekání.
Práce s přihlašovacími údaji
Přihlašovací údaje — WordPress admin, Stripe secret key, servisní účet Google Analytics — potřebují zvláštní zacházení. Použijte type: "secret" (tarif Solo a vyšší; na Free tarifu položka skončí chybou plan_required).
{
"key": "wp_admin",
"type": "secret",
"label": "Current WordPress admin credentials",
"help": "Username and password for wp-admin. Encrypted before storage, shown to your developer once."
}Klientův vstup putuje přes HTTPS a je zapečetěný na serveru BriefGate pomocí libsodium sealed box ještě předtím, než se cokoli zapíše do databáze. Uchovává se pouze šifrovaný text; prostý text se drží v paměti jen tak dlouho, aby ho bylo možné zapečetit a později jednou odhalit.
Když agent zavolá get_intake_results, položka typu secret nese dešifrovaný prostý text přímo ve svém záznamu v results — ale jen při prvním odhalení:
{
"wp_admin": {
"value": "admin:MyPassword123",
"one_time": true,
"first_reveal": true,
"expires_at": "2026-08-15T10:00:00Z"
}
}Tahle value zmizí ve chvíli, kdy je přečtená: při dalším volání get_intake_results položka z results úplně zmizí a meta u ní uvede secret_unavailable, protože už byla odhalená. Agent by měl hodnotu přesunout do secrets manageru ještě předtím, než s odpovědí udělá cokoli dalšího — přes API už se znovu nezíská. Pokud ji nikdo nevyzvedne do 30 dní, stejným způsobem expiruje; požádejte klienta o nové odeslání přes request_revision.
Vyžádání opravy
Když agent zkontroluje nahrané podklady a najde problém s kvalitou, může položku označit a požádat klienta o nové odeslání:
request_revision(
intake_id: "int_01J3K...",
item_key: "logo",
note: "The uploaded logo is 200px wide. We need at least 512px for retina screens. If you have an SVG version, that would be ideal — SVG scales to any size without quality loss."
)Klient dostane e-mail, uvidí poznámku u označené položky ve svém portálu, znovu ji nahraje a odešle. Webhook item.submitted vystřelí znovu. Agent zavolá get_intake_results a najde aktualizovaný soubor.
Tohle drží celý cyklus oprav uvnitř BriefGate — žádné samostatné e-mailové vlákno, žádné riziko, že se původní odeslání přepíše bez záznamu.
Tipy
Nejdřív koncept, pak odeslání. Předejte define_intake parametr send: false a intake se založí bez toho, aby se klientovi hned poslal e-mail. Zkontrolujte položky a pak ho uvolněte příkazem POST /v1/intakes/:id/send — pro pozdější odeslání konceptu neexistuje MCP nástroj, tenhle krok vede přes REST.
Zpracování po částech. Nastavte only_new: true u get_intake_results a dostanete jen položky schválené od posledního volání. Užitečné ve webhook handleru, který má reagovat na nová odeslání bez opakovaného zpracování celého intake.
Vězte, kdy se položky automaticky schválí. Odeslaná položka se automaticky schválí po auto_approve_hours (výchozí 72), pokud ji nezkontrolujete sami. Nastavte na define_intake hodnotu 0, pokud chcete, aby každá položka čekala na explicitní schválení, než se počítá za hotovou.
Přihlašovací údaje odhalte jednou a hned. Jak je popsáno výše, prostý text položky secret se přes get_intake_results vrátí přesně jednou — uložte ho do secrets manageru ve stejném kroku, ne až v pozdější session.