Podklady od klienta pro OpenAI Codex: sbírejte materiály bez opuštění terminálu
Codex dokáže během jedné session naskládat rezervační flow, a pak čekat dny na to, až klient e-mailem pošle galerii, ceník a přihlášení do rezervačního nástroje.
Problém
Fotoateliér vás najme, aby vám postavil nový rezervační web. Codex rychle vyskládá strukturu, kalendářový widget i stránku s ceníkem — a pak se zasekne, protože web potřebuje skutečnou portfoliovou galerii, opravdový ceník a admin přístup do rezervačního nástroje, který ateliér už používá, a nic z toho v chatu neexistuje. Požádáte o to klienta. Za dva dny odpoví šesti fotkami z mobilu vloženými do e-mailu a screenshotem tabulky. Heslo do rezervačního nástroje nepřijde nikdy, protože nikdo nechce psát heslo do e-mailového vlákna — a měl by pravdu.
Mezera není v rychlosti Codexu při psaní kódu. Je to vzdálenost mezi „web potřebuje 30 až 40 fotek z portfolia, ceník a přihlášení" a tím mít tyhle tři věci ve formě, kterou Codex reálně použije.
Řešení
BriefGate MCP dá Codexu na tohle nástroj místo zprávy v chatu. Codex zavolá define_intake() s typovaným seznamem toho, co projekt potřebuje. BriefGate klientovi pošle e-mailem odkaz na portál s vaším brandingem, průběžně validuje, co přijde, a klienta automaticky upomíná podle rozvrhu, který zvolíte. Jakmile je vše uvnitř, Codex zavolá get_intake_results() a dostane zpět soubory, strukturovaná data a jednorázové odhalení přihlašovacích údajů — žádné opakované ptaní, žádné hádání, která fotka ve vlákně je ta finální.
Přidání BriefGate do Codexu
Codex čte konfiguraci MCP serveru z ~/.codex/config.toml (nebo z projektově vázaného .codex/config.toml v důvěryhodném projektu). Codex CLI, rozšíření do IDE i desktopová aplikace ChatGPT sdílejí stejný soubor, takže server přidaný jednou z terminálu je dostupný ve všech třech.
Varianta A — lokální balíček, přidaný z CLI
codex mcp add briefgate --env BRIEFGATE_API_KEY=bg_live_xxxxx -- npx -y @briefgate/mcpTím se do config.toml zapíše tabulka [mcp_servers.briefgate]:
[mcp_servers.briefgate]
command = "npx"
args = ["-y", "@briefgate/mcp"]
[mcp_servers.briefgate.env]
BRIEFGATE_API_KEY = "bg_live_xxxxx"Klíč získáte na https://app.briefgate.dev/app. Radši nechcete vpisovat klíč přímo do konfiguračního souboru? Přidejte server bez --env a v rámci Codex session zavolejte vlastní nástroj BriefGate login — vypíše krátký kód a otevře dashboard v prohlížeči; po schválení se klíč uloží do ~/.briefgate/credentials.json sám. Je to samostatný krok od čehokoli, co spouští Codex — je to nástroj, který nabízí MCP server BriefGate, popsaný v referenci MCP nástrojů.
Varianta B — hostovaný endpoint, OAuth
BriefGate provozuje také hostovaný endpoint Streamable HTTP s OAuth 2.1 a vlastní MCP klient Codexu podporuje nativně oba transporty i OAuth — místo command/args pole url a samostatný přihlašovací krok:
codex mcp add briefgate --url https://mcp.briefgate.dev/mcp
codex mcp login briefgatePrvní příkaz endpoint zaregistruje, druhý pro něj spustí vlastní OAuth flow Codexu — otevře prohlížeč pro přihlášení a schválení přístupu. Je to stejný mechanismus, jakým se k Codexu připojí jakýkoli MCP server na Streamable HTTP s OAuth — nejde o integraci specifickou pro BriefGate, jen o obecný postup, zdokumentovaný na stránce Codex MCP od OpenAI.
Jedna věc, kterou stojí za to vědět předem: lokální config.toml sdílí CLI, rozšíření do IDE i desktopová aplikace ChatGPT, ale ne webové rozhraní ChatGPT — web se k nástrojům postaveným na MCP dostává přes nainstalované pluginy, ne čtením vaší lokální konfigurace, takže server přidaný z terminálu se tam automaticky neobjeví.
Obě varianty zpřístupní stejných 13 nástrojů: define_intake, add_items, update_item, update_intake, list_intakes, get_intake_status, get_intake_results, request_revision, send_chase, manage_recipients, manage_webhook, list_folders a create_folder.
Jak Codexu říct, kdy to použít
Codex čte projektové instrukce ze souboru AGENTS.md. Přidejte tam sekci, aby místo ptaní se v chatu sáhl po BriefGate:
## Sběr podkladů od klienta
Když projekt potřebuje od klienta soubor, obrázek, přihlašovací údaj nebo text:
1. Zavolej define_intake s items[] popisujícím přesně, co je potřeba
2. Klientovi se automaticky pošle e-mail s odkazem na portál — nikdy o něj nežádej v chatu
3. Pokračuj ve stavbě všeho, co na chybějících položkách nezávisí
4. Kontroluj get_intake_status, nebo zaregistruj webhook přes manage_webhook,
místo nečinného čekání na odpověď
5. Po dokončení zavolej get_intake_results
6. Pro jakékoli heslo nebo API key použij type: "secret" — nikdy prostý textPříklad z praxe
Agent: „Rezervační kalendář a layout ceníku jsou hotové. Abych dokončil web, potřebuju portfoliovou galerii, aktuální ceník a přístup do rezervačního nástroje, který už používáte. Zakládám BriefGate intake."
Codex zavolá define_intake:
{
"project_name": "Lucia Ferraro Photography — Booking Site",
"client": {
"email": "[email protected]",
"name": "Lucia",
"language": "en"
},
"items": [
{
"key": "gallery",
"type": "file_list",
"label": "Portfolio gallery",
"help": "30 to 40 of your best shots, full resolution as exported from your camera or editing software — not resized for Instagram. We'll use the sharpest ones as the homepage hero.",
"required": true,
"constraints": { "formats": ["jpg", "png"], "min_count": 30, "max_count": 40 }
},
{
"key": "price_list",
"type": "file",
"label": "Current price list",
"required": true,
"constraints": { "formats": ["pdf"] }
},
{
"key": "booking_tool_login",
"type": "secret",
"label": "Booking tool admin login",
"help": "Username and password for the scheduling system you use today, so we can pull your existing packages and availability rules.",
"required": true
}
],
"chase_schedule": "default"
}Agent: „Intake odeslán Lucii. Zatím budu pokračovat ve stavbě mřížky galerie a šablony ceníku s náhradním obsahem, dokud tyhle věci nedorazí."
Všimněte si poctivého omezení u položky gallery: file_list přijímá seznam formátů a minimální/maximální počet, ale na rozdíl od typu image pro jeden soubor nemá omezení minimální šířky, které by portál dokázal vynutit. Požadavek na 40 fotek je omezený a validovaný počtem; „plné rozlišení" je jen doporučení v textu nápovědy, který klient čte — BriefGate kvůli tomu soubor v nízkém rozlišení neodmítne. Co který typ skutečně kontroluje, najdete v přehledu typů položek.
Návrat mezi session
Session v Codexu, podobně jako většina session terminálových agentů, si po zavření terminálu neudrží průběžnou paměť toho, co ještě chybí. Poznamenejte si intake_id někam, kde přežije — do komentáře u kódu, který na něm závisí, nebo do řádku v AGENTS.md daného projektu — a na začátku další session nejdřív ověřte get_intake_status(intake_id: "in_..."), než usoudíte, že nic nedorazilo, nebo než znovu zavoláte define_intake a pošlete Lucii druhý odkaz.
Práce s výsledky
Jakmile jsou galerie, ceník i přihlášení kompletní, Codex zavolá get_intake_results:
{
"status": "completed",
"results": {
"gallery": [
{ "filename": "portrait-01.jpg", "url": "https://files.briefgate.dev/.../portrait-01.jpg?token=...", "width": 4032, "height": 3024 }
],
"price_list": { "filename": "ferraro-photo-pricing-2026.pdf", "url": "https://files.briefgate.dev/.../price_list.pdf?token=..." },
"booking_tool_login": { "value": "[email protected]:MyPassword123", "one_time": true, "first_reveal": true }
}
}Pole value u secretu je přítomné jen při tomto prvním volání — uložte ho hned do svého secrets manageru podle Secrets, protože další volání get_intake_results už ho znovu nevrátí. Pokud se některá fotka v galerii přece jen ukáže jako export v nízkém rozlišení, request_revision(intake_id, "gallery", note) ji označí bez nutnosti zakládat nové e-mailové vlákno — celé volání je v referenci MCP nástrojů.
Co dál
| Téma | Dokument |
|---|---|
| Úplná reference všech 13 MCP nástrojů | mcp.md |
| Všechny typy položek a jejich omezení | item-types.md |
| Připojení dalších agentů | Podklady od klienta do vašeho coding agenta |