Hvad er en MCP-server, og hvordan foretager den telefonopkald
September 2, 2026 · 7 minutter læsetid
En MCP-server er en grænseflade, der lader en AI-editor eller en assistent (Claude Code, Cursor, Windsurf og andre) række ud efter et værktøj hos en ekstern tjeneste under kørsel og bruge det direkte - ikke bare tale om det. Model Context Protocol (MCP) er en åben standard, hvormed editoren beder om en liste over tilgængelige værktøjer, vælger det rigtige ud fra prompten og kalder det med rigtige parametre; serveren i den anden ende kører værktøjet og sender resultatet tilbage ind i samtalen. Hos volai er et af disse værktøjer make_call - derfor kan en AI-editor helt bogstaveligt tage telefonen og ringe til nogen, uden at der skrives en eneste linje kode.
Hvad er en MCP-server?
Model Context Protocol blev introduceret i november 2024 af Anthropic som en åben standard til at forbinde AI-modeller med eksterne værktøjer og data - i stedet for at hver editor og hver tjeneste finder på sin egen engangsintegration, taler de ét fælles protokolsprog. MCP skelner mellem to sider: MCP-klient er den app, der kører (Claude Code, Cursor, Claude Desktop), og MCP-server er den grænseflade, en tjeneste (her volai) udstiller udadtil - en liste over tools (værktøjer), som den kan bede om at køre.
volais MCP-server kører på https://volai.cz/mcp (en ekstern server, der nås via den såkaldte streamable HTTP-transport, ikke en proces på den egen disk) og udstiller 110 værktøjer (pr. 3. november 2026; den aktuelle liste står altid på /docs/mcp) - lige fra at tjekke saldoen og købe et nummer til at sende en SMS og, ja, foretage et opkald.
Hvordan kalder en MCP-klient et værktøj?
Der sker en håndfuld trin mellem installationen af serveren og et egentligt telefonopkald - editoren klarer dem alle, det eneste, der skrives, er prompten:
- Editoren forbinder til serveren og godkendes med en API-nøgle (
Authorization: Bearer vk_...) - den samme nøgle som til REST API'et, med samme ratebegrænsning på 60 anmodninger i minuttet. - Serveren sender en liste over værktøjer tilbage - for hvert enkelt et navn, en beskrivelse i klartekst og den præcise form på parametrene (et JSON-skema).
- Modellen læser beskrivelserne og vælger det, der passer til prompten - fx
make_call, når prompten siger "ring". - Editoren kalder værktøjet med rigtige parametre - et faktisk telefonnummer og faktiske instruktioner til agenten, ikke generisk tekst.
- Serveren hos os kører værktøjet - starter opkaldet, trækker kredit - og returnerer resultatet to gange: som en læselig sætning og samtidig som strukturerede data (
structuredContent) til en klient, der kan læse dem direkte. - Modellen får resultatet tilbage i samtalen og fortæller, hvad der skete - eller går videre til et andet værktøj, fx
get_call, for at vente på, at opkaldet slutter, og hente en udskrift.
Eksempel: make_call i praksis
Editoren får sagt, hvad der ønskes, på almindeligt sprog - fx: "Ring til +420777123456, præsenter dig som receptionist for Nordic Coffee, og find ud af, om opkalderen vil reservere et bord." Editoren omsætter det til et kald til værktøjet make_call - den del ses aldrig direkte, men under motorhjelmen ser den sådan ud:
{
"to": "+420777123456",
"systemPrompt": "Du er receptionist på caféen Nordic Coffee. Tag opkaldet, præsenter dig, og find ud af, om opkalderen vil reservere et bord - hvis ja, så spørg om navn og tidspunkt."
}Værktøjet kræver en destination (to - et tjekkisk eller slovakisk nummer, de eneste volai kan ringe til i dag) og præcis ÉN af tre måder at køre opkaldet på - agentId (en egen agent håndterer det), from (en ren bro mellem to numre, uden agent) eller systemPrompt (et prøveopkald uden eget nummer - én anmodning, intet at købe eller sætte op først). Serveren svarer på begge måder på én gang (et uddrag - den fulde form på opkaldsobjektet står i REST API-referencen):
{
"call": {
"id": "c_7a2f91de",
"direction": "out",
"to": "+420777123456",
"status": "initiated",
"startedAt": 1756111400000
},
"trial": true,
"from": "+420..."
}Opkaldet går ud fra et fælles volai-demonummer, følger instruktionerne i systemPrompt og faktureres som normalt inklusive agenttillægget - blot med en strengere daglig grænse end en rigtig agent: højst tre prøveopkald uden eget nummer pr. konto pr. dag (beskrevet i REST API-referencen, pr. 6. september 2026). Derfor indeholder svaret også trial: true og from med det fælles volai-demonummer, så det er tydeligt, at opkaldet ikke gik ud fra et eget nummer.
Hvordan hænger en MCP-server sammen med telefonopkald?
MCP-serveren tager ikke selv telefonen - den er hoveddøren, som prompten når den egentlige tjenestelogik igennem. Bag den kalder make_call det samme lag som REST API'et og portalen, som sætter opkaldet ud på telefonnettet præcis som ethvert andet udgående volai-opkald - over en SIP-trunk, der bygger bro mellem internetsignalering og det egentlige telefonnet (hvordan det sker, står i Hvad er en SIP-trunk). MCP er det sprog, AI-editoren taler; en SIP-trunk er det sprog, telefonnettet taler - og tjenestelogikken imellem forbinder de to.
Sikkerhed
MCP godkendes med den samme API-nøgle som REST API'et - den, der har den, kan bruge kreditten i kontoindehaverens navn: købe numre, ringe, sende SMS og oprette agenter. Nøglen hører kun hjemme i editorens konfiguration, aldrig i frontend-kode eller et GitHub-repositorium. Mistanke om læk er kun et knaptryk væk i portalen (API og MCP) - sletning af nøglen træder i kraft med det samme og kan ikke fortrydes.
Et andet beskyttelseslag kører på serveren, ikke i prompten. Et nummer på listen over numre, der ikke må ringes til (værktøjet add_to_dnc), blokerer opkald via make_call og via relayet, uanset hvad prompten siger - modellen behøver ikke selv huske, hvem den ikke må ringe til, serveren håndhæver grænsen. På samme måde bærer værktøjer, der koster penge eller ændrer noget uigenkaldeligt (make_call, send_sms, delete_agent...), deres egne markeringer i protokollen - serveren oplyser på forhånd, om en handling er destruktiv eller sikker at gentage. Handlinger, der koster penge, er bevidst IKKE idempotente: et andet kald til make_call efter en afbrudt forbindelse starter et andet opkald og trækker en anden betaling, så en velopdragen klient prøver ikke selv igen efter en timeout.
Én ting mangler med vilje: frigivelse af et købt telefonnummer eller mobilnummer er ikke blandt de 110 værktøjer. At købe et nummer via MCP virker, at frigive et gør ikke - en uigenkaldelig handling, der kan koste en kunde det nummer, der står trykt på flyeren, kræver portalen eller REST API'et, ikke én misforstået sætning i en prompt.
Prøv det selv
Installation i Claude Code er én kommando i terminalen (Cursor, Windsurf og Claude Desktop kræver hver få linjer JSON, se /docs/mcp):
claude mcp add --transport http volai https://volai.cz/mcp \
--header "Authorization: Bearer vk_YOUR_KEY"| Ønske | Hvor man går hen |
|---|---|
| Den fulde værktøjsliste og opsætning til andre editorer | MCP-server |
| De samme data over almindelige HTTP-anmodninger fra eget backend | REST API |
Så hvor går opkaldet egentlig hen?
make_call sender i sidste ende lyd ud på det rigtige telefonnet over en SIP-trunk - hvad det er, og hvorfor en AI-stemmeagent har brug for en, forklarer Hvad er en SIP-trunk.
Prøv volai - de første 50 kr er på os
Du opretter en konto på et minut og får straks en startsaldo til opkald og nummer - SMS kan sendes efter den første opfyldning.
Læs videre
Relaterede artikler
Hvad er en SIP-trunk
En SIP-trunk fører telefonopkald over internettet i stedet for over et kabel - netop det, en AI-stemmeagent har brug for for at kunne tage telefonen.
Fem spørgsmål, før man anskaffer en AI receptionist
Pris, drift på 5 minutter, viderestilling hos O2/T-Mobile/Vodafone, slovakiske numre og moms - fem svar direkte fra prislisten og indstillingerne.
Hvad koster en AI-receptionist for en lille virksomhed
Opdeling af prisen på en AI-receptionist på telefonen: nummer, minutter og agent fra volais prisliste, tre scenarier efter drift og en sammenligning med udbydernes priser.