Podklady od klienta pro agenty v Cursoru: sbírejte materiály, aniž byste opustili editor

Aktualizováno:

BriefGate MCP umožňuje agentovi v Cursoru sesbírat klientovo logo, texty a přihlašovací údaje přes sledovaný portál, místo aby se build uprostřed zasekl.

Problém

Agent v Cursoru dokáže během jedné session naskládat a postavit většinu klientského webu, pak se ale pokaždé zasekne na stejné věci: chybí logo, text hlavní stránky nebo přihlášení do klientova hostingu a nikdo v chatu je nedokáže dodat. Můžete agenta požádat, aby se zastavil a připomněl vám napsat klientovi e-mail. Udělá to, a připomínka pak zůstane sedět v transkriptu chatu, který už nikdo znovu neotevře. O dva týdny později zjistíte, že se projekt zasekl, protože klient nikdy neposlal fotky, a nikde není záznam o tom, kdy jste o ně žádali nebo jestli jste žádali dvakrát.

Skutečné úzké hrdlo není kódování. Je to mezera mezi „tohle potřebuju od klienta" a tím mít to v použitelné, typované podobě přímo v té session, kde zrovna stavíte.

Řešení

BriefGate MCP tuhle mezeru zavírá. Agent v Cursoru zavolá define_intake() se seznamem typovaných položek — logo, text hero sekce, rozvrh otevírací doby, přihlášení do WordPressu. BriefGate klientovi pošle e-mailem odkaz na portál s vaším brandingem, v reálném čase validuje, co odešle, a automaticky upomíná podle rozvrhu, který si zvolíte. Jakmile je klient hotový, agent zavolá get_intake_results() a dostane zpět typovaná data a podepsané URL adresy souborů — žádné parsování, žádné opakované dotazování, žádné hádání, jestli „logo" znamená 200pixelový JPEG ze tří e-mailů zpátky.

Nastavení BriefGate MCP v Cursoru

Cursor čte konfiguraci MCP serveru ze souboru mcp.json — buď .cursor/mcp.json v projektu (sdílený s týmem, když je zacommitovaný v repu), nebo ~/.cursor/mcp.json globálně. Oba používají stejný objekt mcpServers. BriefGate můžete přidat dvěma způsoby.

Varianta A — hostovaný endpoint s OAuth (nejméně pohyblivých částí)

Přidejte hostovaný Streamable HTTP endpoint bez jakéhokoli klíče:

json
{
  "mcpServers": {
    "briefgate": {
      "url": "https://mcp.briefgate.dev/mcp"
    }
  }
}

Otevřete v Cursoru Settings → Tools & Integrations, najděte položku briefgate a klikněte na Needs login. Cursor otevře prohlížeč na BriefGate dashboardu; přihlaste se, schvalte přístup a Cursor si uloží výsledné přihlašovací údaje. Do konfiguračního souboru není potřeba nic vpisovat — záznam jen s url stačí, aby Cursor server objevil a spustil OAuth flow.

Varianta B — lokální balíček s API key (pro CI, nebo když nechcete přesměrování přes prohlížeč)

json
{
  "mcpServers": {
    "briefgate": {
      "command": "npx",
      "args": ["-y", "@briefgate/mcp"],
      "env": {
        "BRIEFGATE_API_KEY": "bg_live_xxxxx"
      }
    }
  }
}

Klíč získáte na https://app.briefgate.dev/app. Po úpravě mcp.json restartujte Cursor (nebo znovu načtěte panel MCP) — platí pro obě varianty. Po připojení 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 agentovi říct, kdy to použít

Pravidla v Cursoru fungují stejně jako CLAUDE.md u Claude Code — přidejte projektové pravidlo (.cursor/rules/briefgate.mdc, nebo jen poznámku do stávajícího souboru s pravidly), aby agent místo ptaní se v chatu sáhl po BriefGate:

Když potřebuješ od klienta materiál, přihlašovací údaj nebo text:
1. Zavolej define_intake s items[] popisujícím přesně to, co je potřeba
2. Klientovi se automaticky pošle e-mail s odkazem na portál — nepiš mu sám
3. Pokračuj v jiné práci; kontroluj get_intake_status nebo počkej na
   webhook intake.completed, místo aby ses blokoval čekáním na odpověď
4. Zavolej get_intake_results, aby ses dostal k typovaným datům a URL souborů
5. Pro jakékoli heslo, API key nebo přihlášení použij type: "secret" — nikdy
   se na přihlašovací údaje neptej přímo v chatu ani v commit message

Příklad z praxe

Agent: „Struktura webu je hotová. Než dokončím rezervační stránku, potřebuju aktuální menu, přístup do Google Business Profile a API key rezervačního widgetu. Zakládám BriefGate intake."

Agent zavolá define_intake:

json
{
  "project_name": "Karlin Noodle Bar — Website Refresh",
  "client": {
    "email": "[email protected]",
    "name": "Petra",
    "language": "en"
  },
  "items": [
    {"key": "menu_pdf", "type": "file", "label": "Current menu (PDF)", "required": true, "constraints": {"formats": ["pdf"]}},
    {"key": "gbp_access", "type": "secret", "label": "Google Business Profile login", "required": true},
    {"key": "reservation_widget_key", "type": "secret", "label": "Reservation widget API key", "required": true}
  ],
  "chase_schedule": "default"
}

BriefGate vrátí intake_id a portal_url a rovnou pošle Petře e-mail. Úplný seznam omezení, která každý typ přijímá, najdete v přehledu typů položek, a všechna pole, která define_intake přijímá, v referenci MCP nástrojů.

Agent: „Intake odeslán. Petra dostane e-mail na [email protected]. Zatím budu pokračovat ve stavbě layoutu rezervační stránky s náhradním obsahem a vrátím se k tomu, jakmile tyhle tři položky dorazí."

Zatímco klient vyplňuje portál

Agent nemusí nečinně čekat. Pokračuje v práci na všem, co na chybějících položkách nezávisí — layout, navigace, náhradní sekce. Chase engine BriefGate posílá upomínkové e-maily podle rozvrhu, který nastavíte (default je T+2d, T+5d, T+9d, pak jednou týdně), takže nikdo nemusí pamatovat na to, že má upomenout. Zaregistrovaný endpoint manage_webhook nahlásí intake.completed ve chvíli, kdy je klient hotový; jinak get_intake_status levně ověří průběh.

Návrat mezi jednotlivými session v Cursoru

Práce v Cursoru bývá rozdělená do mnoha krátkých session, ne do jedné dlouho běžící konverzace — zavřete editor, vrátíte se druhý den, třeba i na jiném stroji. Další session si nepamatuje intake založený dřív, pokud to někde mimo chat nezaznamená, takže si intake_id poznamenejte do komentáře u kódu, který na něm závisí:

// BriefGate intake in_8f3kQmR2 — menu PDF, GBP login, reservation widget key

Než agent usoudí, že nic nedorazilo — nebo hůř, znovu zavolá define_intake a pošle Petře druhý odkaz na portál — nová session nejdřív ověří stav pomocí get_intake_status(intake_id: "in_8f3kQmR2"). Pokud se intake_id ztratilo, stejný intake najde podle klientova e-mailu list_intakes(client_email: "[email protected]").

Pokračování s výsledky

Jakmile portál ukazuje, že je vše odesláno, agent zavolá get_intake_results:

json
{
  "status": "completed",
  "results": {
    "menu_pdf": {
      "url": "https://files.briefgate.dev/in_8f3kQmR2/menu_pdf.pdf?token=...",
      "filename": "karlin-noodle-bar-menu.pdf",
      "mime": "application/pdf"
    },
    "gbp_access": {"value": "[email protected]:MyPassword123", "first_reveal": true},
    "reservation_widget_key": {"value": "rw_live_9f2kQmR2xY", "first_reveal": true}
  }
}

Agent: „Menu, přihlášení do Google Business Profile i API key rezervačního widgetu jsou tu. Ukládám oba přístupové údaje do projektového secrets manageru a pak zapojuju widget do rezervační stránky a odkazuju menu z hlavní stránky."

Práce s přihlašovacími údaji

U gbp_access a reservation_widget_key výše je to právě type: "secret", díky čemu je bezpečné je takhle přenášet místo text. Hodnota putuje k BriefGate přes HTTPS a je zapečetěná až tam — na serveru BriefGate, ne v klientově prohlížeči ani agentem — pomocí libsodium sealed boxu, ještě než se vůbec zapíše do databáze. Agent sám nic nedešifruje: server BriefGate vrátí čistý text přesně jednou, při prvním odhalení, přes get_intake_results. Celý mechanismus jednorázového odhalení je v Secrets, a pokud agent má jen obecnou představu, jaké přihlašovací údaje projekt potřebuje, checklist má jak bezpečně požádat o klientova přihlášení.

Vyžádání opravy

Pokud se vrácený soubor s menu ukáže být rozmazanou fotkou vytištěného menu z mobilu, ne skutečným exportem, agent kvůli tomu nemusí zakládat nové e-mailové vlákno:

request_revision(
  intake_id: "in_8f3kQmR2",
  item_key: "menu_pdf",
  note: "The menu came through as a photo of the printed page and it's too blurry to typeset. Could you export a proper PDF from whatever tool you used to make it, or a flat, straight-on scan?"
)

Klient uvidí poznámku u označené položky ve svém portálu, znovu ji nahraje a agentovo další volání get_intake_results už zachytí opravený soubor — celé to zůstává uvnitř téhož sledovaného intake, bez samostatného e-mailu, který by se dal ztratit z dohledu.