Przejdź do treści

Czym jest serwer MCP i jak łączy się z telefonowaniem

September 2, 2026 · 7 minut czytania

Serwer MCP to interfejs, dzięki któremu edytor AI lub asystent (Claude Code, Cursor, Windsurf i inne) może w trakcie pracy sięgnąć po narzędzie zewnętrznej usługi i od razu z niego skorzystać - a nie tylko o nim rozmawiać. Model Context Protocol (MCP) to otwarty standard, za pomocą którego edytor prosi o listę dostępnych narzędzi, wybiera właściwe dla danego polecenia i wywołuje je z prawdziwymi parametrami; serwer po drugiej stronie wykonuje narzędzie i odsyła wynik do rozmowy. W volai jednym z takich narzędzi jest make_call - dlatego edytor AI może dosłownie podnieść słuchawkę i do kogoś zadzwonić, a Państwo nie napiszą ani jednej linijki kodu.

Czym jest serwer MCP?

Model Context Protocol zaprezentowała w listopadzie 2024 roku firma Anthropic jako otwarty standard łączenia modeli AI z zewnętrznymi narzędziami i danymi - zamiast tego, by każdy edytor i każda usługa wymyślały własną, osobną integrację, posługują się jednym wspólnym protokołem. MCP rozróżnia dwie strony: klient MCP to uruchomiona u Państwa aplikacja (Claude Code, Cursor, Claude Desktop), a serwer MCP to interfejs, który usługa (tutaj volai) udostępnia na zewnątrz - z listą narzędzi, które można wywołać.

Serwer MCP volai działa pod adresem https://volai.cz/mcp (to serwer zdalny, połączony przez tzw. transport streamable HTTP, a nie proces na Państwa dysku) i udostępnia 110 narzędzi (stan na 3 listopada 2026; aktualną listę zawsze znajdą Państwo na /docs/mcp) - od sprawdzenia salda przez zakup numeru po wysłanie SMS-a i, tak, wykonanie połączenia.

Jak klient MCP wywołuje narzędzie?

Między instalacją a prawdziwym połączeniem dzieje się kilka kroków, które wykonuje sam edytor - Państwo piszą tylko polecenie:

  1. Edytor łączy się z serwerem i uwierzytelnia kluczem API (Authorization: Bearer vk_...) - tym samym kluczem co REST API, z tym samym limitem zapytań: 60 na minutę.
  2. Serwer odsyła listę narzędzi - przy każdym z nich nazwę, opis czytelny dla człowieka i dokładny kształt parametrów (schemat JSON).
  3. Model na podstawie opisu wybiera to, które pasuje do polecenia - na przykład make_call, gdy w poleceniu padło „zadzwoń”.
  4. Edytor wywołuje narzędzie z prawdziwymi parametrami - numerem telefonu i instrukcjami dla agenta, a nie ogólnym tekstem.
  5. Serwer po naszej stronie wykonuje narzędzie - zakłada połączenie, pobiera saldo - i zwraca wynik dwukrotnie: jako czytelne zdanie oraz jednocześnie jako dane strukturalne (structuredContent), by klient, który to potrafi, mógł je wziąć wprost.
  6. Model dostaje wynik z powrotem do rozmowy i mówi, co się stało - albo przechodzi do kolejnego narzędzia, na przykład get_call, by poczekać na koniec rozmowy i przynieść Państwu transkrypcję.

Przykład: make_call w praktyce

Edytorowi mówią Państwo zwykłym zdaniem, czego chcą - na przykład: „Zadzwoń pod +420777123456, przedstaw się jako recepcjonista kawiarni Kavka i dowiedz się, czy gość chce zarezerwować stolik.” Edytor składa z tego wywołanie narzędzia make_call - dokładnie tego Państwo nie zobaczą, ale pod maską wygląda to tak:

json
{
  "to": "+420777123456",
  "systemPrompt": "Jesteś recepcjonistą kawiarni Kavka. Odbierz połączenie, przedstaw się i zapytaj, czy dzwoniący chce zarezerwować stolik - jeśli tak, zapytaj o imię i godzinę."
}

Narzędzie wymaga celu (to - czeskiego lub słowackiego numeru, bo tylko na takie volai dziś dzwoni) i dokładnie JEDNEGO z trzech sposobów prowadzenia rozmowy - agentId (poprowadzi ją Państwa agent), from (zwykłe połączenie dwóch numerów bez agenta) albo systemPrompt (połączenie próbne bez własnego numeru - jedno zapytanie, nic nie trzeba wcześniej kupować ani zakładać). Serwer odpowiada od razu także w formie strukturalnej (to wycinek - pełny kształt obiektu połączenia jest w dokumentacji REST API):

json
{
  "call": {
    "id": "c_7a2f91de",
    "direction": "out",
    "to": "+420777123456",
    "status": "initiated",
    "startedAt": 1756111400000
  },
  "trial": true,
  "from": "+420..."
}

Połączenie wychodzi ze wspólnego numeru demo volai, przebiega według instrukcji w systemPrompt i jest rozliczane normalnie, łącznie z dopłatą za agenta - tylko z ostrzejszym dziennym limitem niż przy własnym agencie: najwyżej trzy połączenia próbne bez własnego numeru na konto dziennie (limit opisano w dokumentacji REST API, stan na 6 września 2026). Dlatego odpowiedź zawiera też trial: true oraz from ze wspólnym numerem demo volai, by było jasne, że połączenie nie wyszło z Państwa własnego numeru.

Jak MCP łączy się z telefonowaniem?

Sam serwer MCP żadnego telefonu nie odbiera - to tylko brama wejściowa, którą polecenie trafia do prawdziwej logiki usługi. Za nią make_call wywołuje tę samą warstwę co REST API i portal, ta zakłada połączenie w sieci telefonicznej i dalej wszystko idzie tak jak przy każdym innym połączeniu wychodzącym volai - przez SIP trunk, który łączy internetową sygnalizację z prawdziwą siecią telefoniczną (jak dokładnie, opisuje artykuł Czym jest SIP trunk). MCP jest więc językiem, którym mówi edytor AI, SIP trunk jest językiem, którym mówi sieć telefoniczna - a pomiędzy nimi leży logika usługi, która łączy jedno z drugim.

Bezpieczeństwo

MCP autoryzuje się tym samym kluczem API co REST API - kto go ma, może w Państwa imieniu wydawać saldo: kupować numery, dzwonić, wysyłać SMS-y, zakładać agentów. Klucz należy więc wyłącznie do konfiguracji edytora, nigdy do kodu frontendu ani do repozytorium na GitHubie. Podejrzenie wycieku załatwia jeden przycisk w portalu (API i MCP) - usunięcie klucza działa natychmiast i nie można go cofnąć.

Druga warstwa ochrony działa na serwerze, nie w poleceniu. Numer dodany do listy numerów, na które nie wolno dzwonić (narzędzie add_to_dnc), blokuje połączenia przez make_calli przez relay niezależnie od tego, co napisano w poleceniu - model AI nie musi sam pamiętać, do kogo dzwonić nie wolno, granicy pilnuje serwer. Podobnie narzędzia, które kosztują pieniądze albo zmieniają coś nieodwracalnie (make_call, send_sms, delete_agent...), niosą w protokole własne znaczniki - serwer z góry mówi, czy akcja jest nieodwracalna, czy można ją bezpiecznie powtórzyć. Akcje płatne celowo NIE SĄ idempotentne: drugie wywołanie tego samego make_call po zerwaniu łączności wykona drugie połączenie i pobierze drugą płatność, więc dobry klient po przekroczeniu czasu nie powtarza go sam z siebie.

Jednej rzeczy zupełnie celowo brakuje: zwolnienie kupionego numeru telefonu ani numeru SMS nie należy do 110 narzędzi. Numer przez MCP kupić można, anulować go nie - do nieodwracalnej akcji, która może pozbawić klienta numeru wydrukowanego na ulotce, potrzebny jest portal lub REST API, a nie jedno źle zrozumiane zdanie w poleceniu.

Jak to wypróbować

Instalacja w Claude Code to jedno polecenie w terminalu (Cursor, Windsurf i Claude Desktop mają własne kilka linijek JSON, zob. /docs/mcp):

bash
claude mcp add --transport http volai https://volai.cz/mcp \
  --header "Authorization: Bearer vk_TWOJ_KLUCZ"
Czego Państwo szukająDokąd dalej
Pełna lista narzędzi i instalacja w innych edytorachSerwer MCP
Te same dane przez zwykłe zapytania HTTP z własnego backenduREST API

A dokąd to połączenie naprawdę trafia?

make_call ostatecznie wpuszcza dźwięk do prawdziwej sieci telefonicznej przez SIP trunk - czym on jest i dlaczego potrzebuje go agent głosowy AI, wyjaśnia artykuł Czym jest SIP trunk.

Wypróbuj volai - pierwsze 50 kr na nasz koszt

Konto zakładają Państwo w minutę i od razu mają na nim saldo startowe na połączenia i numer - SMS-y wyślą Państwo po pierwszym doładowaniu.

Wypróbować za darmo