Přeskočit na obsah

Napojení

MCP server

MCP (Model Context Protocol) umožní AI editoru - Claude Code, Codex CLI, Codex desktop, Cursor, Windsurfu a dalším - načíst nástroj z cizí služby a použít ho podle zadání. Po připojení začni read-only ověřením; další práce, například SMS, úkoly nebo hlasový agent, je volitelná.

Přihlášení přes účet volai

V Codex CLI, Codex desktop, Claude Code nebo jiném klientovi s OAuth přidej vzdálený MCP server https://volai.cz/mcp. Otevři přihlášení, přihlas se k volai a zkontroluj aplikaci i rozsah přístupu. Souhlas zahrnuje práci s daty účtu, hlasové agenty a placené hovory, SMS a objednávky čísel.

OAuth připojení je první volba: příklady pro Claude Code, Codex CLI a Codex desktop najdeš v záložkách níže. Připojení je hotové až po read-only načtení, ne po pouhém uložení konfigurace.

bash
claude mcp add --transport http --scope user volai 'https://volai.cz/mcp'
claude mcp login volai

Připojené aplikace najdeš v portálu v části API a MCP. Přístup můžeš okamžitě odvolat; změna hesla jej také zneplatní. OAuth token platí pro MCP, REST dál používá API klíč.

OAuth připojení je dostupné přímo přes adresu serveru. Zařazení volai do oficiálního katalogu OpenAI nebo Anthropic podléhá jejich schválení; vlastní plugin marketplace takové schválení neznamená.

Fallback: ruční připojení přes API klíč

Server běží na https://volai.cz/mcp. Když klient OAuth neumí, použij existující API klíč z portálu; návod je v Quickstartu. Vyber si editor. Nový klíč není součástí povinného připojení:

Jeden příkaz v terminálu a je hotovo:

bash
claude mcp add --header 'Authorization: Bearer vk_TVUJ_KLIC' --transport http --scope user volai 'https://volai.cz/mcp'

Rovnou přidat do editoru

Claude Code

bash
claude mcp add --header 'Authorization: Bearer vk_TVUJ_KLIC' --transport http --scope user volai 'https://volai.cz/mcp'

Po instalaci nahraď vk_TVUJ_KLIC svým klíčem z průvodce AI asistent v portálu.

Ověř připojení bez utrácení kreditu

Po přidání serveru nech editor nejdřív zavolat get_balance. Nástroj jen čte, nic nestojí a zaznamená, že toto MCP připojení funguje. Další bezpečná kontrola je list_agents. Nevolej, neposílej SMS ani nekupuj číslo jen kvůli ověření spojení.

Kalendář

Účet nejdřív připoj v Připojení. Pak použij list_integrations -> list_calendars -> list_calendar_events -> get_calendar_event. Změnu připrav přes propose_calendar_update, ukaž původní událost a návrh a až po potvrzení volej confirm_calendar_update s confirm: true. Při calendar_stale_revision načti událost znovu a nech schválit nový návrh. U Apple použij jako eventId přesnou hodnotu externalId z výpisu událostí. Jde o neprůhledný identifikátor záznamu CalDAV, ne o iCalendar UID; nesestavuj ho ani nedekóduj.

Časové údaje posílej s pásmem, například 2026-10-05T10:00:00+02:00. Celodenní události používají YYYY-MM-DD a konec je výlučný. Seznam vrací nejvýš 50 událostí; pro další stránku pošli nextPageToken jako pageToken se stejnými filtry. Toto rozhraní upravuje existující události. Apple recurring:true představuje celou sérii: změna upraví její základ a zachová jednotlivé výjimky. Apple události bez pásma zachovávají místní čas bez posunu.

Kromě Google Kalendáře funguje i Apple Calendar (připojuje se heslem pro konkrétní aplikaci). Nástroje list_calendar_events i get_calendar_event umí obojí; calendarId musí být jedna z hodnot z list_calendars, jinak přijde 400 calendar_invalid_calendar.

Podrobný postup (připojení účtu, co rozhraní umí a neumí) je v průvodci Připojení.

Fakturoid & ABRA Flexi

Fakturoid nebo ABRA Flexi nejdřív připoj v Připojení. Pak použij list_integrations -> list_invoices (volitelný search) -> get_invoice pro čerstvý důkaz. Seznam vrací prvních 40 výsledků Fakturoidu nebo 50 ABRA; podle potřeby zpřesni hledání. amountDueMinor používá nejmenší jednotky měny. null a status: unknown nejsou důkazem úhrady. Tyto nástroje faktury pouze čtou.

Nástroje

Všech 92 nástrojů volá stejnou servisní vrstvu jako REST API a portál - stejná pravidla, stejné ceny, stejné limity (i těch 60 požadavků za minutu: MCP a REST je sdílejí, protože jedou na tomtéž klíči). Editor si podle popisu každého nástroje sám vybere ten správný, tobě stačí napsat, co chceš.

Účet

get_account
RESTGET /v1/account
Kdy ho AI použijePřečtení profilu účtu - jméno, jazyk e-mailů a dokladů, adresa, firemní údaje a stav ověření DIČ. Přepínače e-mailových upozornění jsou tu jen ke čtení, mění se výhradně v portálu.
update_account
RESTPATCH /v1/account
Kdy ho AI použijeZměna jména nebo jazyka účtu (e-maily a doklady) - jazyk odpovědí REST/MCP se tím nemění, ten je vždy anglicky.
update_billing_details
RESTPUT /v1/account/billing
Kdy ho AI použijeUživatel mění fakturační adresu nebo firemní údaje (IČO, DIČ) - zahraniční DIČ se ověří v registru VIES a při úspěchu přepne účet na přenesenou daňovou povinnost, což mění cenu dalších dobití.
list_api_keys
RESTGET /v1/api-keys
Kdy ho AI použijeVýpis API klíčů účtu. Založení nového klíče jde jen v portálu; odvolání cizího klíče taky - MCP nemá ani jedno, klíč nesmí umět zneplatnit ostatní klíče na účtu.

Připojení

list_integrations
RESTGET /v1/integrations
Kdy ho AI použijeSeznam připojených účtů, připravenost konfigurace a odkazy pro připojení Google, Apple, Fakturoidu a ABRA Flexi. Přihlášení probíhá ve volai a u poskytovatele; ready popisuje konfiguraci, nikoli stav účtu.

Faktury

list_invoices
RESTGET /v1/integrations/{id}/invoices
Kdy ho AI použijeNajde vydané faktury hledáním u poskytovatele; prvních 40 výsledků z Fakturoidu nebo 50 z ABRA Flexi.
get_invoice
RESTGET /v1/integrations/{id}/invoices/{invoiceId}
Kdy ho AI použijeNačte čerstvý stav faktury, zbývající částku a důkaz od poskytovatele. Neznámé či chybějící hodnoty nepotvrzují úhradu.

Kalendáře

list_calendars
RESTGET /v1/integrations/{id}/calendars
Kdy ho AI použijeNačte kalendáře připojeného účtu včetně časového pásma a oprávnění.
list_calendar_events
RESTGET /v1/integrations/{id}/events
Kdy ho AI použijeSeznam Google událostí nebo Apple událostí a opakovaných sérií s hledáním, časovým rozmezím a stránkováním po 50.
get_calendar_event
RESTGET /v1/integrations/{id}/events/{eventId}
Kdy ho AI použijeNačte aktuální detail události a sourceRevision, který je potřeba ke změně.
propose_calendar_update
RESTPOST /v1/integrations/{id}/events/{eventId}/propose
Kdy ho AI použijePřipraví změnu názvu nebo termínu bez zápisu. AI ukáže původní údaje a návrh uživateli.
confirm_calendar_update
RESTPATCH /v1/integrations/{id}/events/{eventId}
Kdy ho AI použijePo výslovném potvrzení uživatele zapíše návrh a ověří výsledek u poskytovatele. Změněnou revizi odmítne.
find_free_slots
RESTPOST /v1/integrations/{id}/availability
Kdy ho AI použijeNajde volné termíny v připojeném kalendáři bez uloženého agenta. Chybějící windows znamená 24 hodin každý den.
create_calendar_event
RESTPOST /v1/integrations/{id}/events
Kdy ho AI použijeZaloží schůzku po výslovném potvrzení uživatele (confirm: true). Těsně před zápisem ověří, že termín je stále volný.

Zůstatek

get_balance
RESTGET /v1/balance
Kdy ho AI použijeZjištění aktuálního zůstatku kreditu - kolik zbývá utratit, plus odhad výdrže a případné upozornění (nulový zůstatek, blížící se poplatek za číslo).

Čísla

get_number
RESTGET /v1/numbers/{e164}
Kdy ho AI použijeDetail jednoho vlastního telefonního čísla - stejná data jako jedna položka výpisu list_numbers.
join_number_waitlist
RESTPOST /v1/numbers/waitlist
Kdy ho AI použijePřihlášení do fronty na nabídku, která je momentálně vyprodaná (buy_number selhal kódem pool_empty) - nekupuje číslo, jen zaregistruje zájem, volai pošle e-mail, až bude k dispozici.
leave_number_waitlist
RESTDELETE /v1/numbers/waitlist/{offerId}
Kdy ho AI použijeOdhlášení z fronty na jednu konkrétní nabídku, aniž by to ovlivnilo místo ve frontě na jinou nabídku.
get_callback_routing
RESTGET /v1/numbers/{e164}/callback-routing
Kdy ho AI použijePřečte pravidla návratu na číslo bez změny jeho výchozího agenta.
set_callback_routing
RESTPUT /v1/numbers/{e164}/callback-routing
Kdy ho AI použijeNastaví návrat podle doloženého předchozího hovoru. Aktivace resolveru na motoru je samostatný krok.
get_sip_status
RESTGET /v1/numbers/{e164}/sip/status
Kdy ho AI použijeStav SIP registrace u čísla ve směrování Vlastní SIP ústředna a poslední příchozí hovor na něj - diagnostika, ne přihlašovací údaje (ty vrací get_sip_credentials).
list_numbers
RESTGET /v1/numbers
Kdy ho AI použijeVýpis telefonních čísel účtu a jejich směrování.
search_available_numbers
RESTGET /v1/numbers/available
Kdy ho AI použijeNabídka volných čísel k zakoupení, než se něco koupí - včetně slovenského bratislavského čísla.
buy_number
RESTPOST /v1/numbers
Kdy ho AI použijeUživatel chce nové telefonní číslo pro svou aplikaci - pražské, brněnské, internetové (910), nebo slovenské bratislavské (platí se 3 měsíce dopředu).
find_number_address
RESTGET /v1/numbers/address-options
Kdy ho AI použijeHledání adresy provozovny v číselníku operátora - první krok objednávky čísla z jiného kraje. Stačí poslat celou adresu jako query, nebo vést kaskádu krokově.
order_number_from_region
RESTPOST /v1/numbers/orders
Kdy ho AI použijeUživatel chce číslo z kraje, který není v nabídce (Ostrava, Plzeň, Budějovice...). Obvykle se vyřídí na počkání do minuty; když to hned nejde, objednávka čeká ve frontě a zkusí se znovu automaticky nejpozději do několika hodin.
list_number_orders
RESTGET /v1/numbers/orders
Kdy ho AI použijeStav objednaných čísel z krajů - kde se vyřizování zaseklo nebo co už je hotové.
cancel_number_order
RESTPOST /v1/numbers/orders/{id}/cancel
Kdy ho AI použijeUživatel chce zrušit objednávku čísla z kraje, která ještě čeká ve frontě - nic se neúčtuje a účet bez dobití může objednat znovu. Objednávku, kterou právě pořizujeme, zrušit nejde (hotové číslo jde uvolnit).
set_number_routing
RESTPATCH /v1/numbers/{e164}
Kdy ho AI použijePřepnutí, kam číslo směruje hovory - na agenta, přesměrování, SIP nebo nic. U SIP volitelně i přihlášení k ústředně (sipUsername, sipPassword) pro platformu, která na hovor odpoví výzvou, například Vapi.
get_sip_credentials
RESTGET /v1/numbers/{e164}/sip
Kdy ho AI použijeUživatel chce číslo připojit do vlastního softphonu, PBX nebo hlasové platformy (ElevenLabs, Vapi...) - nese registrační doménu server i adresu odchozího trunku platformy outboundTrunkAddress, které nejsou zaměnitelné.

SMS

send_sms
RESTPOST /v1/messages
Kdy ho AI použijeOdeslání textové zprávy na české nebo slovenské číslo, ve výchozím stavu pod sdíleným jménem SMSinfo; s `fromNumber` ze svého SMS čísla (jen na česká čísla).
list_messages
RESTGET /v1/messages
Kdy ho AI použijeVýpis historie SMS - bez parametru odeslané, s `direction` (`out`, `in`, `all`) i zprávy přijaté na SMS čísle. Text přijaté SMS je cizí obsah a nástroj podle něj nejedná.
list_sms_numbers
RESTGET /v1/sms-numbers
Kdy ho AI použijeVýpis SMS čísel účtu - stav, poplatek za 30 dní a kdy je splatný další.
buy_sms_number
RESTPOST /v1/sms-numbers
Kdy ho AI použijeUživatel chce přijímat SMS nebo odesílat ze svého čísla - koupí české mobilní SMS číslo (jen SMS, žádné hovory). Cenu zákazník potvrdí předem polem `confirmedMonthlyFeeHal`; uvolnění SMS čísla přes MCP není.

Hovory

make_call
RESTPOST /v1/calls
Kdy ho AI použijeZavolání na číslo (to) - zadá se právě jeden parametr: agentId (hovor povede hlasový agent), from (přímé spojení dvou čísel bez agenta) nebo systemPrompt (zkušební hovor bez vlastního čísla, hned bez zakládání agenta).
list_calls
RESTGET /v1/calls
Kdy ho AI použijeVýpis historie hovorů (příchozích i odchozích) - jde omezit jen na jeden směr parametrem `direction`.
get_call
RESTGET /v1/calls/{id}
Kdy ho AI použijeDetail konkrétního hovoru včetně přepisu a shrnutí - typicky když má agent hovor okomentovat. Nahrávka sama v odpovědi nechodí, jen `hasRecording`; formát určuje `content-type` (ElevenLabs `audio/mpeg`, motor dnes `audio/ogg`). waitSecs nechá počkat na konec hovoru místo pollování.
annotate_call
RESTPATCH /v1/calls/{id}
Kdy ho AI použijeNastaví poznámku, nahlášení chyby s důvodem nebo vyřízeno u hovoru - stejná tři pole jako karta hovoru v portálu. flagReason nastaví nahlášení a zruší příznak vyřízeno, unflag ho odebere.

Hlasy

list_voices
RESTGET /v1/voices
Kdy ho AI použijeZjištění platných hodnot pro voiceId u create_agent/update_agent - katalog hlasů. `provider: "elevenlabs"` vrátí jen hlasy, které umí agent na ElevenLabs (dnes jediný, `anet`); `provider: "engine"` vrátí stejný seznam jako bez filtru, protože motor umí přehrát kterýkoli hlas katalogu.

Agenti

create_agent
RESTPOST /v1/agents
Kdy ho AI použijeVytvoření hlasového agenta s nástroji, přepojením a zapisovanými údaji. `useForOutboundTasks: true` vyžádá motor volai, `false` začne na ElevenLabs a vynechané pole použije výchozí nastavení nasazení podle jazyka agenta (`cs` a `sk` motor, `en`, `de` a `pl` ElevenLabs). Neprázdné `transferTo` se pak pokusí přesunout agenta z ElevenLabs na motor, ale přepnutí může být nedostupné nebo selhat, takže rozhoduje vrácené `provider`. Když výslednou platformu neznáš předem, při založení vynech `voiceId` a nastav podporovaný hlas až následným `update_agent`; explicitní `true` nahradí známý nekompatibilní hlas, včetně `anet`, výchozím hlasem motoru, zatímco vynechaná volba s výchozím motorem stejnou hodnotu odmítne. `silencePromptSecs` (3 až 25, výchozích 10, `null` vypne) se přijímá u obou poskytovatelů - zazní až u agenta na motoru. `laughter` (`auto`/`on`/`off`, vynechané pole se uloží jako `auto`) se přijímá taky u obou poskytovatelů - zazní jen u agenta na motoru s českým hlasem Cartesia.
list_agents
RESTGET /v1/agents
Kdy ho AI použijeVýpis existujících agentů účtu.
get_agent
RESTGET /v1/agents/{id}
Kdy ho AI použijeDetail jednoho agenta včetně živého stavu smíchu (`laughterEffective`) pro publikovanou verzi - list_agents ho záměrně nenačítá, aby výpis nevolal motor na každý řádek.
get_agent_call_hold
RESTGET /v1/agents/{id}/call-hold
Kdy ho AI použijePřečte vlastní trvalou rozpočtovou stopku agenta, bez změny stavu.
stop_agent_calls
RESTPOST /v1/agents/{id}/call-hold
Kdy ho AI použijeTrvale zastaví nové odchozí hovory a ověřené callbacky vlastního agenta motoru. Nemá obnovení, neuvolní admin blokaci a neukončí běžící hovory. Při nejistém výsledku ověřte get_agent_call_hold; nezávislý výpadek resolveru stále ponechá výchozího agenta čísla.
update_agent
RESTPATCH /v1/agents/{id}
Kdy ho AI použijeÚprava promptu, hlasu nebo čísla u existujícího agenta - a taky zapnutí nástrojů, přepojení, nahrávání (recordCalls; když je zapnuté, agent to volajícímu automaticky řekne v první větě, nahrávky držíme 90 dní) a zapisovaných údajů a připomínky v tichu (`silencePromptSecs`, 3 až 25, `null` vypne) a smíchu (`laughter`, `auto`/`on`/`off`, vynechané pole nechá beze změny). Odpověď navíc vždy nese čerstvý `laughterEffective`, ale jako pole vedle `agent`, ne uvnitř něj jako u `get_agent` - `PATCH /v1/agents/{id}` `laughterEffective` nevrací vůbec. Selže-li opakovaně chybou `in_progress`, agenta blokuje koncept nebo nejistá operace - vyřeš ji přes `get_agent_draft`/REST `POST .../draft/operation`, ne opakovaným voláním naslepo.
delete_agent
RESTDELETE /v1/agents/{id}
Kdy ho AI použijeSmazání agenta, který se už nepoužívá.
test_call
RESTPOST /v1/agents/{id}/test-call
Kdy ho AI použijeZkušební hovor od agenta na zadané číslo hned teď - účtuje se stejně jako běžný odchozí hovor, jen s přísným stropem 3 hovorů na účet za den napříč všemi agenty.

Koncepty

rollback_agent_draft
RESTPOST /v1/agents/{id}/draft/rollback
Kdy ho AI použijeNávrat agenta k dřívější publikované revizi z historie - sahá na poskytovatele a telefonii stejně jako publish_agent_draft, proto po nejisté operaci nikdy neopakovat naslepo.
reconcile_agent_draft_operation
RESTPOST /v1/agents/{id}/draft/operation
Kdy ho AI použijeVyřešení uvízlé nejisté operace konceptu poté, co člověk ověřil, co je doopravdy živé - protějšek REST POST /v1/agents/{id}/draft/operation.
get_agent_draft
RESTGET /v1/agents/{id}/draft
Kdy ho AI použijePřečtení konceptu (draft) agenta před úpravou - koncept, živou (published) verzi, revizi k dalším voláním, poslední výsledek simulace a to, jestli agenta něco blokuje.
save_agent_draft
RESTPUT /v1/agents/{id}/draft
Kdy ho AI použijeBezpečná úprava agenta beze změny živého provozu - uloží koncept, na kterém si zákazník chce úpravu nejdřív ověřit (třeba i simulací), než ji pustí ven přes publish_agent_draft.
publish_agent_draft
RESTPOST /v1/agents/{id}/draft/publish
Kdy ho AI použijeNasazení uloženého konceptu na živého agenta - jediný krok konceptu, který sahá na poskytovatele (ElevenLabs nebo motor volai) a telefonii.
simulate_agent_draft
RESTPOST /v1/agents/{id}/simulate
Kdy ho AI použijeRychlé vyzkoušení formulace promptu nebo jiné úpravy textem, než se koncept publikuje - běží proti uloženému konceptu, ne proti živému agentovi, zákazníkovi se neúčtuje.

Nástroje

list_tools
RESTGET /v1/tools
Kdy ho AI použijeVýpis webhook nástrojů účtu - typicky předtím, než se některý přiřadí agentovi. Hodnoty hlaviček se vracejí maskované.
test_tool
RESTPOST /v1/tools/testPOST /v1/tools/{id}/test
Kdy ho AI použijeOdešle skutečný požadavek na adresu nástroje se vzorovými hodnotami - buď na už uložený nástroj (toolId), nebo na rozepsaný formulář (url, method), nikdy na oboje najednou. Přesměrování se nikdy nenásleduje.
create_tool
RESTPOST /v1/tools
Kdy ho AI použijeUživatel chce, aby agent během hovoru zavolal jeho API - ověřil objednávku, zapsal rezervaci, zjistil volný termín.
update_tool
RESTPATCH /v1/tools/{id}
Kdy ho AI použijeZměna adresy, popisu, hlaviček nebo parametrů existujícího nástroje.
delete_tool
RESTDELETE /v1/tools/{id}
Kdy ho AI použijeSmazání nástroje, který se už nepoužívá - vrátí agenty, kterým tím přestal fungovat.

Webhooky

remove_webhook
RESTDELETE /v1/webhook
Kdy ho AI použijeZrušení webhooku - volai přestane posílat cokoliv. Stejná akce jako set_webhook s prázdným url, jen výslovná. Nový webhook jde kdykoli nastavit znovu přes set_webhook.
list_webhook_deliveries
RESTGET /v1/webhook/deliveries
Kdy ho AI použijeVýpis posledních 50 doručení webhooku (úspěšná, neúspěšná i testovací z send_test_webhook) - stejná data jako recentDeliveries v get_webhook.
get_webhook
RESTGET /v1/webhook
Kdy ho AI použijeKontrola, kam se právě posílají události a jestli je webhook vůbec nastavený.
set_webhook
RESTPUT /v1/webhook
Kdy ho AI použijeNastavení URL, kam má volai posílat události (dokončený hovor, odeslaná SMS...). Prázdné url webhook zruší.
send_test_webhook
RESTPOST /v1/webhook/test
Kdy ho AI použijeOvěření, že nastavená URL webhooku doopravdy přijímá data - pošle jednu testovací událost bez ohledu na to, jaké skutečné události má účet odebírané.

Relay

create_relay_lease
RESTPOST /v1/relay
Kdy ho AI použijeZprovoznění odchozího hovoru z vlastního (BYO) hlasového agenta přes relay - připraví jednorázové spojení mezi vlastním číslem a cílem.
list_relay_leases
RESTGET /v1/relay
Kdy ho AI použijeVýpis aktivních relay spojení vlastního agenta.
cancel_relay_lease
RESTDELETE /v1/relay/{id}
Kdy ho AI použijeZrušení nevyužitého relay spojení, ať neblokuje slot v poolu.

Seznam nevolat

add_to_dnc
RESTPOST /v1/dnc
Kdy ho AI použijePřidání čísla na seznam nevolat, ať na něj agent (vlastní i zabudovaný) už nezavolá.
list_dnc
RESTGET /v1/dnc
Kdy ho AI použijeVýpis ručního seznamu nevolat i indexovaných automatických blokací. Blokace z doby před verzí 1.8.0 může ve výpisu chybět.
remove_from_dnc
RESTDELETE /v1/dnc/{e164}
Kdy ho AI použijeOdebrání čísla jen z ručního seznamu nevolat; automatickou blokaci ruší `unblock_destination`.
unblock_destination
RESTPOST /v1/dnc/{e164}/unblock
Kdy ho AI použijeZrušení automatické blokace bez změny ručního seznamu. Funguje i pro starší blokaci, která v `list_dnc` chybí.

Changelog

get_changelog
RESTGET /v1/changelog
Kdy ho AI použijeCo se změnilo v API, MCP a portálu volai - stejná data jako /en/changelog, filtrovaná podle data nebo verze (since), oblasti (area) a počtu (limit). Zavolej vždy, když se serverInfo.version liší od verze, kterou naposledy viděl klient.

Úkoly

list_tasks
RESTGET /v1/tasks
Kdy ho AI použijeVýpis odchozích úkolů (hromadných kampaní) účtu, nejnovější první.
get_task
RESTGET /v1/tasks/{id}
Kdy ho AI použijeDetail jednoho úkolu včetně issues - problémy s příjemci, čísly, rozpočtem nebo externalRefs, co ho blokují na startu (prázdné pole neznamená, že je start jistý - ten dál kontroluje připravenost agenta a okno volání).
create_task
RESTPOST /v1/tasks
Kdy ho AI použijeZaložení konceptu odchozího úkolu pro nejvýše 1 000 příjemců. Nic se nevytáčí ani neúčtuje, dokud ho nespustí start_task; celý JSON záznam úkolu má limit 2 MB.
update_task
RESTPATCH /v1/tasks/{id}
Kdy ho AI použijeÚprava pravidel editovatelného úkolu - příjemci, okno volání, limity pokusů nebo délky, rozpočet. Po zahájení vytáčení už úkol editovatelný není.
pause_task
RESTPOST /v1/tasks/{id}/pause
Kdy ho AI použijeZastavení dalšího vytáčení běžícího úkolu - rozjetý hovor tím nepřeruší.
resolve_task_item
RESTPOST /v1/tasks/{id}/items/{itemId}/resolve
Kdy ho AI použijeRozhodnutí o kontaktu ve stavu review. retry ho vrátí do pending a další skutečně vytočený hovor se běžně účtuje a započítá; skip zabrání dalšímu hovoru. U billing_unknown obě volby zachovají původní hovor poskytovatele i rezervaci, dokud reconcile_task nezjistí cenu, takže i skip může být za původní hovor později účtován. Po skip úkol se zbývající prací přejde do paused a jde spustit; retry čeká na cenu. U `dial:destination_auto_blocked` nejdřív zavolej `unblock_destination` s číslem kontaktu a teprve potom `retry`; u vlastního čísla, čísla jiného účtu volai, neplatného čísla, čísla mimo CZ/SK a prémiové linky pomůže jen `skip`. U běžícího úkolu vrací resolve chybu `task_not_editable`, takže počkej na needs_attention, nebo úkol pozastav.
reconcile_task
RESTPOST /v1/tasks/{id}/reconcile
Kdy ho AI použijeSladění stavu úkolu se skutečnými hovory po výpadku workeru nebo nejistém výsledku u poskytovatele - bezpečné volat kdykoli.
start_task
RESTPOST /v1/tasks/{id}/start
Kdy ho AI použijeSpuštění nebo obnovení placeného vytáčení po potvrzení skutečného počtu příjemců a rozpočtu. Samotný start nic nestrhne; před každým pokusem se rezervuje rozpočet, skutečně umístěný hovor se běžně účtuje a útrata úkolu se potom sladí se zaznamenanou cenou.

Kredit

list_ledger
RESTGET /v1/credit/ledger
Kdy ho AI použijeVýpis posledních pohybů na kreditu (dobití, hovory, SMS, poplatky za čísla, vratky, ruční úpravy), nejnovější první.
get_auto_topup
RESTGET /v1/credit/auto-topup
Kdy ho AI použijePřečtení nastavení automatického dobíjení - zapnuto/vypnuto, práh, částka, uložená karta. Zapnutí a změna částky jde jen přes Checkout (portál nebo REST), odsud ne.
disable_auto_topup
RESTPATCH /v1/credit/auto-topup
Kdy ho AI použijeVypnutí automatického dobíjení. Zapnutí zpátky nebo změna částky vyžaduje nový Checkout.

Na klíč

create_setup_order
RESTPOST /v1/setup-orders
Kdy ho AI použijeUživatel chce nechat postavit hlasového agenta na klíč majitelem volai za jednorázový poplatek - jeden popis, žádné doptávání; nejasnosti se zapíšou jako domněnky do nabídky. Malému živnostníkovi s málo hovory bez integrací doporučí místo toho Lorelu.
list_setup_orders
RESTGET /v1/setup-orders
Kdy ho AI použijeVýpis objednávek Na klíč na účtu.
get_setup_order
RESTGET /v1/setup-orders/{id}
Kdy ho AI použijeDetail jedné objednávky Na klíč včetně nabídky, zpráv od majitele volai a nextStep - věty, co dělat dál.
message_setup_order
RESTPOST /v1/setup-orders/{id}/messages
Kdy ho AI použijeZpráva do existující objednávky Na klíč - před platbou přepíše nabídku (bez doptávání), po zaplacení jde jen jako poznámka majiteli; u hotové objednávky založí kolo úprav.
checkout_setup_order
RESTPOST /v1/setup-orders/{id}/checkout
Kdy ho AI použijeVytvoří odkaz na Stripe Checkout pro zaplacení objednávky Na klíč (zřízení + první dobití kreditu) - otevřít a zaplatit musí člověk.
launch_setup_order
RESTPOST /v1/setup-orders/{id}/launch
Kdy ho AI použijePotvrzení hotové objednávky Na klíč zákazníkem, až po vlastním vyzkoušení hovoru - ne automaticky.
cancel_setup_order
RESTPOST /v1/setup-orders/{id}/cancel
Kdy ho AI použijeZrušení dosud nezaplacené objednávky Na klíč.

Fakturační údaje

list_billing_documents
RESTGET /v1/billing/documents
Kdy ho AI použijeVýpis vlastních daňových dokladů volai k dobitím kreditu - ne dokladů z připojeného účetního systému (na to slouží list_invoices).
get_billing_document
RESTGET /v1/billing/documents/{id}
Kdy ho AI použijeDetail jednoho daňového dokladu k dobití kreditu - samotné PDF jde stáhnout jen přes REST API.

create_agent, update_agent, publish_agent_draft a rollback_agent_draft uloží (respektive publikují) agenta i s první větou, která nesděluje, že mluví digitální asistent (evropský AI Act, čl. 50), nebo je odhadem delší než 7 sekund toho, co volající SKUTEČNĚ SLYŠÍ - první věta plus věta o nahrávání, když je recordCalls zapnuté (asi 2,53 slova za sekundu) - nic z toho tím neblokují, jen upozorní; nezměněná výchozí šablona první věty tenhle druhý kód nikdy nespustí. rollback_agent_draft vrací warnings stejně jako publish_agent_draft, protože taky propisuje první větu na živého agenta. Odpověď pak v textu nese větu „Warning: ...“ (MCP odpovídá vždy anglicky) a strojově čitelně kódy first_message_no_ai_disclosure a/nebo first_message_too_long v structuredContent.warnings. Agent s fázemi (pole workflow) přidává do stejného pole další kódy stejně jako portálový editor - dead_end, empty_node, entry_phrase_never_spoken, missing_enter_phrase, short_condition, condition_about_agent, base_prompt_long, workflow_not_synced_to_provider, workflow_node_tool_not_synced (nástroj přiřazený jen fázi se k agentovi na ElevenLabs zatím nepřenáší) a workflow_node_tool_missing (uzel odkazuje nástroj, který na účtu už není - smazaný; fázi je potřeba uložit bez něj) - žádný z nich uložení neblokuje. Základní prompt agenta s fázemi by měl nést i dvě věty, bez kterých agent nejčastěji odpoví, co neví: „Provozní údaje, které nemáš v zadání (otevírací doba, lhůty, ceny, dostupnost lidí), neříkej a neodhaduj - řekni, že to upřesní kolega.“ a „Ptej se vždy jen na jednu věc najednou.“ Varování, které patří konkrétní fázi nebo přechodu, nese navíc nodeId, nebo edgeId. Tvar pole workflow, limity a rozepsaný příklad jsou na /docs/api v sekci Fáze hovoru (workflow). Hovor takového agenta navíc nese workflowPath (get_call, list_calls) - cestu přes uzly - ale jen když ho vyřídil vlastní hlasový motor volai (provider: "engine"); u agenta na ElevenLabs pole nikdy nepřijde, i když fázemi prošel. Samostatný kód calendar_pending_engine_switch se objeví, když má agent nastavený calendar (termíny podle kalendáře), ale běží na ElevenLabs - nastavení se uloží a začne fungovat, jakmile agent přejde na vlastní motor volai. Agent s připojeným číslem, jehož zadání používá proměnnou mimo sadu, kterou příchozí hovor doopravdy dodává, dostane prompt_variables_unavailable_inbound (na příchozím hovoru se dosadí jako prázdný text); první věta, ve které po odstranění všech {{...}} bloků nezůstane žádné písmeno ani číslice mimo proměnné, dostane first_message_empty - ani jeden kód uložení neblokuje. Samostatný kód agent_misuse_suspected (create_agent, update_agent, publish_agent_draft, rollback_agent_draft, save_agent_draft, simulate_agent_draft, make_call, create_task/update_task a create_tool/update_tool) se objeví, když konfigurace agenta, koncept, popis nástroje, proměnné hovoru, název nebo proměnné úkolu nebo prompt zkušebního hovoru obsahuje formulace vydávající se za úřad či jinou instituci, nebo žádající citlivé údaje - viz Podmínky volai § 10; jde jen o upozornění, nic neblokuje. Jen create_agent navíc vrací elevenlabs_by_explicit_choice, když dostal useForOutboundTasks: false u jazyka, kterému by nasazení jinak dalo vlastní motor volai (dnes cs a sk), a agent proto zůstal na ElevenLabs bez hlasů a funkcí motoru; agenta jen na příchozí hovory zakládej bez toho pole.

Nástroje agenta jsou dva kroky, ne jeden

create_tool nástroj jen založí - žádnému agentovi ho sám nezapne. Teprve update_agent s toolIds mu ho přiřadí, a pole se posílá VŽDY CELÉ: co v něm nepošleš, agent po úpravě mít nebude. Týž nástroj může používat víc agentů, patří účtu.

Zvuk nahrávky přes MCP nechodí. get_call řekne polem hasRecording, jestli nahrávka je, a samotnou nahrávku stáhneš stejným API klíčem z GET /v1/calls/{id}/recording - formát určuje hlavička content-type odpovědi: u agenta na ElevenLabs audio/mpeg (MP3), u agenta na motoru volai dnes audio/ogg. Binární tělo v odpovědi MCP nástroje nemá co dělat.

Bezpečná úprava agenta je taky dva kroky, ne jeden: get_agent_draft -> save_agent_draft -> volitelně simulate_agent_draft -> publish_agent_draft. Uložení konceptu nikdy nemění běžícího agenta - živě se projeví až publish_agent_draft. Pro okamžitou změnu bez mezikroku zůstává update_agent.

Co MCP záměrně neumí

V MCP schválně chybí víc věcí, ne jedna - všechny tam, kde by hrozila škoda z jedné špatně pochopené věty nebo z prompt injection. Uvolnění zakoupeného čísla (DELETE /v1/numbers/{e164}) a SMS čísla (DELETE /v1/sms-numbers/{e164}) je v REST API i v portálu, ale ne mezi MCP nástroji - nevratná akce. Stejně schválně chybí odpojení připojené integrace nebo karty, zapnutí či nastavení automatického dobíjení a zápis do e-mailových upozornění (get_account je nese jen ke čtení). Odvolání API klíče v MCP není vůbec - list_api_keys klíče jen vypisuje; odvolat lze jen VLASTNÍ klíč, a to přes REST DELETE /v1/api-keys/{id}, cizí klíč jen v portálu. Přihlašovací údaje k Apple Kalendáři nebo ABRA FlexiBee (POST /v1/integrations) MCP taky nesbírá.

Detail jedné SMS nemá vlastní nástroj, protože by nic nepřidal - list_messages vrací stejná pole jako detailový endpoint. Výdej samotné nahrávky (binární tělo, GET /v1/calls/{id}/recording) taky nemá MCP nástroj - get_call řekne jen hasRecording.

Zkušební hovor bez vlastního čísla je něco jiného a vlastní podporu v make_call má: parametr systemPrompt zavolá ze sdíleného demo čísla volai bez nákupu čísla a bez zakládání agenta. Zkušební hovor OD VLASTNÍHO agenta má od téhle vlny svůj vlastní nástroj test_call - stejný hovor a stejná cena jako make_call s agentId, jen s přísnějším společným denním stropem 3 hovorů na účet napříč všemi agenty.

Vytvoření nového API klíče zůstává jen v portálu (/api-a-mcp), protože klíč, který razí další klíče, by mohl ze ztráty jednoho udělat trvalý přístup. Daňové doklady vznikají automaticky po zaplaceném dobití a MCP je umí číst přes list_billing_documents a get_billing_document; samotné PDF se stahuje jen přes REST. Fakturační adresu a firemní údaje (IČO, DIČ) lze změnit přes update_billing_details.

U konceptu agenta MCP od téhle vlny nástroj pro potvrzení nejisté operace MÁ (reconcile_agent_draft_operation, protějšek REST POST .../draft/operation). Kompletní přehled doručení webhooku (posledních 50, ne jen get_webhook) má taky svůj nástroj - list_webhook_deliveries.

Chyby

MCP nemá HTTP status. Neúspěch nástroje poznáš z isError: true; text výsledku začíná Request error:, Account error:, Busy: nebo volai service error: a structuredContent.error nese stejná pole jako REST: code, cause, message, action, requestId, docsUrl (u konceptu agenta i currentRevision).

cause říká, kdo chybu opraví: request = argumenty nástroje (oprav a zavolej znovu), account = stav účtu zákazníka (kredit, limity, vlastnictví, ověření, neexistující záznam, pozastavení provozovatelem), busy = zámek nebo limit okamžiku (počkej a zopakuj beze změny), service = volai nebo dodavatel (zkus za chvíli, requestId pro podporu). Agent má zákazníkovi říct totéž a nikdy nehlásit request, account ani busy jako výpadek volai.

Tabulka příčin je v dokumentaci REST API v sekci Formát chyb.

Text, který obsahuje Input validation error: Invalid arguments for tool (klient ho většinou ukáže za MCP error -32602:), vzniká v MCP SDK ještě před spuštěním nástroje - argumenty mají špatný tvar. Vždy znamená cause: request, structuredContent u něj chybí a znění pochází z validátoru schématu. Chybějící nebo neplatný API klíč není chyba nástroje: server odpoví HTTP 401 ještě před nástrojem a klíč se opravuje v konfiguraci MCP klienta.

Kde MCP funguje

MCP server volai je obyčejný HTTP transport s hlavičkou Authorization: Bearer vk_... - funguje všude, kde editor umí tenhle základ. Tabulka níž tvrdí jen to, co jsme sami ověřili, s datem.

KlientHTTP transportVlastní hlavička
Claude Codeanoano
Codex CLIanoano
Codex desktopanoano
Cursoranoano
Windsurfanoano
VS Code (Copilot)anoano
Claude Desktopano (přes mcp-remote)ano
n8nano (MCP node)ano (MCP node)

Tvary konfigurací ověřeny 6. 9. 2026; příkaz pro Claude Code a OAuth čtení přes Codex CLI byly znovu ověřeny 11. 9. 2026. Desktopový postup je dokumentovaný, ruční ověření ještě probíhá.

Webové konektory Claude a ChatGPT se mohou přihlásit přes OAuth na https://volai.cz/mcp. Klient načte /.well-known/oauth-protected-resource/mcp, zaregistruje OAuth klienta a otevře souhlas. Dostupnost vlastních konektorů závisí na tarifu a pravidlech organizace.

Co si editor o nástroji přečte předem

Každý nástroj o sobě hlásí, jak se chová - editor podle toho pozná, kdy se má zeptat a kdy smí jednat sám. Není to bezpečnostní hranice (tu drží kredit, limity a seznam nevolat na naší straně), ale je to důvod, proč se tě dobrý klient zeptá dřív, než smaže agenta:

VlastnostCo znamená
readOnlyHintNástroj nic nemění a nic nestojí - všechna list_* a get_*, a navíc search_available_numbers, find_number_address a propose_calendar_update (ten změnu jen připraví, nezapisuje ji).
destructiveHintPřepis existujících dat, zásah do provozu nebo nevratný vedlejší efekt: například update_agent, publish_agent_draft, send_sms, make_call, remove_webhook, nákup čísla, mazání a rušení ochrany. Klient má před takovou akcí získat souhlas uživatele.
idempotentHintZopakování se stejnými hodnotami nic nepřidá. Placené akce (send_sms, make_call, buy_number, buy_sms_number, order_number_from_region) a vytvářecí akce (create_agent, create_relay_lease, create_tool) ho schválně nemají: druhé volání pošle druhou SMS, strhne druhou částku nebo založí druhý záznam, takže je editor po timeoutu nesmí opakovat sám.
openWorldHintAkce sahá ven do telefonní sítě, číselníků operátora nebo připojeného kalendáře, ne jen do záznamů tvého účtu.

Výsledek každého nástroje navíc chodí dvakrát: jako čitelná věta s JSON blokem a zároveň jako strojově čitelný structuredContent - klient, který ho umí, si data vezme odtud a nemusí je louskat z textu.

Vyzkoušej si

Až budeš mít MCP připojené, zkus editoru napsat některou z těchhle vět (klidně svými slovy - nejde o přesné znění):

  • Zavolej mi hned na +420777123456 a zkus roli recepční kavárny - nechci si kvůli tomu zakládat vlastní číslo ani agenta.
  • Kup mi telefonní číslo a nastav na něj agenta, který bude brát objednávky na kávu.
  • Pošli SMS na +420777123456, že objednávka je hotová k vyzvednutí.
  • Vypiš mi posledních 10 hovorů a stručně mi je shrň.
  • Zjisti, kolik mi zbývá kreditu, a upozorni mě, jestli je to málo.
  • Vytvoř agenta na krátký průzkum spokojenosti a rovnou mi na moje číslo zavolej, ať si to vyzkouším.
  • Přidej mojí recepční nástroj, který si na mém API ověří stav objednávky, a zapni ho jí.
  • Ať si agent z každého hovoru zapíše jméno volajícího a jestli věc spěchá.

Bezpečnost

MCP připojíš přes přihlášení volai a výslovný souhlas (OAuth), nebo ručně stejným API klíčem jako REST API. Obě varianty dovolují číst účet i provádět akce včetně placených hovorů a SMS. Přístup AI aplikace odvoláš na stránce AI asistent; klíče spravuješ v sekci Přístupy a API na téže stránce.

Zacházej s klíčem jako s heslem

Nikdy ho nedávej do frontendového kódu, do repozitáře na GitHubu ani nikomu neposílej v čistém textu. Když ho někdo jiný uvidí, může utratit tvůj kredit, dokud nedojde.

Podezření na únik (nebo jen chuť klíč vyměnit) řeší jedno tlačítko: na stránce AI asistent otevři sekci Přístupy a API a klíč smaž - přestane fungovat okamžitě a nejde obnovit. Vytvoř si nový a aktualizuj ho v konfiguraci editoru.