---
title: "Brug ThunderPhone som en MCP-server"
description: "Byg, test, valider og administrer ThunderPhone-stemmeagenter fra Claude, ChatGPT, Claude Code, Codex, Cursor, VS Code eller en anden Streamable HTTP MCP-klient."
---

ThunderPhone eksponerer en Streamable HTTP Model Context Protocol-server på:

```text
https://api.thunderphone.com/v1/mcp
```

Dette er den modsatte retning af [at forbinde en ekstern MCP-server til en stemmeagent](/da/guides/mcp-servers):

| Retning | Resultat |
| --- | --- |
| Ekstern MCP-server → ThunderPhone-agent | En stemmeagent kan kalde den eksterne servers værktøjer. |
| ThunderPhone → din MCP-klient | Din kodningsagent kan bygge, teste og drive ThunderPhone. |

## Godkendelse

Brug som standard [OAuth](/da/guides/oauth) til katalogklienter: Log ind, vælg en organisation, og godkend de anmodede tilladelser. Tilbagekald adgang under **Organisation → API-nøgler → Autoriserede apps**.

For klienter, der er konfigureret med en API-nøgle, skal du oprette en `sk_live_`-nøgle under **Organisation → Nøgler** og eksponere den for din MCP-klient som `THUNDERPHONE_API_KEY`. Nøglen er knyttet til én organisation; et id, der ejes af en anden organisation, opfører sig som om, det ikke findes.

<Warning>
  En `sk_live_`-nøgle kan læse organisationsdata og udføre produktionshandlinger såsom at udrulle agenter, foretage opkald, købe numre, starte kampagner og slette ressourcer. Hold den ude af browserkode, repositories, skærmbilleder og chatlogge. Brug din klients hemmelighedslager eller miljøunderstøttelse, og tilbagekald straks en eksponeret nøgle.
</Warning>

## CLI- og stdio-alternativer

[ThunderPhone CLI](/da/guides/cli) kan skrive klientkonfiguration, mens
ikke-relaterede servere bevares:

```bash
npx -y @thunderphone/mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
npx thunderphone mcp setup --client claude-desktop --scope user
```

Efter en global installation af `@thunderphone/mcp` skal du bruge `thunderphone-mcp setup` med de
samme indstillinger. Opsætning understøtter Claude Code, Codex, Cursor, VS Code, Gemini, Claude
Desktop og Windsurf. Direkte HTTP foretrækkes; Desktop bruger stdio.

For enhver klient, der understøtter stdio, skal du konfigurere `command: "npx"` med
`args: ["-y", "@thunderphone/mcp"]`. Wrapperen bruger først `THUNDERPHONE_API_KEY`,
derefter legitimationsoplysninger fra `thunderphone login`, opdaterer udløbne tokens og derefter
OAuth via `mcp-remote`. Enhedslogin og OAuth kræver den tilsvarende API-
OAuth-udrulning. API-nøglestien gør ikke. Direkte HTTP-konfigurationer læser ikke
CLI-legitimationslageret; brug stdio-wrapperen for at genbruge enhedslogin.

Dette er alternativer til de manuelle klientkonfigurationer nedenfor.

## Klientkonfiguration

Claude og ChatGPT logger ind med [OAuth](/da/guides/oauth); der bruges ingen API-nøgle. Hvis du endnu ikke har en ThunderPhone-konto, skal du vælge **Opret konto** på login-siden. Efter du har bekræftet din e-mail, vender du tilbage til godkendelsesskærmen.

### Claude (web, desktop og mobil)

1. Åbn **Tilpas → Forbindelser** (**Indstillinger → Forbindelser** i ældre versioner). Hvis ThunderPhone vises i oversigten over forbindelser, skal du vælge den. Ellers skal du vælge **Tilføj brugerdefineret forbindelse**, navngive den `ThunderPhone` og angive `https://api.thunderphone.com/v1/mcp`.
2. Vælg **Forbind**, log ind på ThunderPhone, vælg organisationen, og godkend tilladelserne.
3. Aktivér ThunderPhone fra værktøjsmenuen i en chat, og bed om det, du har brug for, f.eks. "Vis mine agenter".

Claude spørger, før den bruger hvert værktøj første gang. For at springe de fleste af disse forespørgsler over skal du åbne **Tilpas → Forbindelser → ThunderPhone** og indstille **Skrivebeskyttede værktøjer** til altid at være tilladt. Disse værktøjer slår kun ting op: agenter, opkald, transskriptioner, saldi og dokumentation. Lad **Værktøjer til skrivning/sletning** kræve godkendelse, hvis du vil se hver ændring, før den sker.

Brugerdefinerede forbindelser kræver et betalt Claude-abonnement. På Team- og Enterprise-abonnementer tilføjer en ejer først forbindelsen under organisationens forbindelsesindstillinger, hvorefter hvert medlem forbinder sin egen ThunderPhone-konto.

### ChatGPT

1. Hvis ThunderPhone vises i ChatGPTs appoversigt, skal du vælge den og oprette forbindelse.
2. Ellers skal du åbne **Indstillinger → Apps og forbindelser → Avancerede indstillinger**, slå **Udviklertilstand** til og oprette en forbindelse med URL-adressen `https://api.thunderphone.com/v1/mcp` og OAuth-godkendelse.
3. Log ind på ThunderPhone, vælg organisationen, og godkend tilladelserne. Føj ThunderPhone til en chat fra værktøjsmenuen.

Sletning af en agent eller et telefonnummer, kassering af et udkast, lancering af en kampagne og afsendelse af en testanmodning, der kan skrive til et eksternt system, kræver en ekstra bekræftelse i begge apps. Se [Bekræftelse af destruktive handlinger](#confirming-destructive-actions).

### Claude Code

```bash
claude mcp add --transport http thunderphone https://api.thunderphone.com/v1/mcp \
  --header "Authorization: Bearer $THUNDERPHONE_API_KEY"
```

### Codex

Føj dette til `~/.codex/config.toml`:

```toml
[mcp_servers.thunderphone]
url = "https://api.thunderphone.com/v1/mcp"
bearer_token_env_var = "THUNDERPHONE_API_KEY"
```

### Cursor

Opret `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "thunderphone": {
      "url": "https://api.thunderphone.com/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${env:THUNDERPHONE_API_KEY}"
      }
    }
  }
}
```

### Claude Desktop

Føj en `mcp-remote`-bro til Claude Desktop-konfigurationen:

```json
{
  "mcpServers": {
    "thunderphone": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.thunderphone.com/v1/mcp",
        "--header",
        "Authorization: Bearer ${THUNDERPHONE_API_KEY}"
      ],
      "env": {
        "THUNDERPHONE_API_KEY": "sk_live_YOUR_API_KEY"
      }
    }
  }
}
```

### VS Code

Opret `.vscode/mcp.json`, og indtast nøglen via VS Codes inputprompt:

```json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "thunderphone-api-key",
      "description": "ThunderPhone organization API key",
      "password": true
    }
  ],
  "servers": {
    "thunderphone": {
      "type": "http",
      "url": "https://api.thunderphone.com/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${input:thunderphone-api-key}"
      }
    }
  }
}
```

## Værktøjer

Alle værktøjer har MCP-annoteringer. I tabellerne betyder **R** skrivebeskyttet, **D** destruktiv, **I** idempotent og **O** interaktion med omverdenen/netværket. En tankestreg betyder, at der ikke er angivet noget hint.

### Forbindelse

| Værktøj | Primære argumenter | Annoteringer | Hvad det gør |
| --- | --- | --- | --- |
| `get_connection_identity` | — | R, I | Validerer legitimationsoplysningerne og returnerer organisationen samt sikre metadata for legitimationsoplysninger. |

### Agenter

| Værktøj | Primære argumenter | Annotationer | Hvad det gør |
| --- | --- | --- | --- |
| `list_agents` | — | R, I | Viser agenter. |
| `get_agent` | `agent_id` | R, I | Henter én agent. |
| `create_agent` | agentkonfiguration | — | Opretter en agent. |
| `update_agent` | `agent_id`, ændrede felter | D | Klargør felter i agentens kladde og erstatter det, kladden indeholdt. Kører uden et bekræftelsestrin: Den deployede agent er uændret indtil `deploy_agent`, og `discard_agent_draft` gendanner kladden. |
| `deploy_agent` | `agent_id`, valgfri `if_updated_at` | D, I | Forfremmer kladden til produktion. |
| `discard_agent_draft` | `agent_id`, valgfri `if_updated_at`, `confirmation_token` i den anden anmodning | D, I | Kasserer klargjorte ændringer. To trin, se [Bekræftelse af destruktive handlinger](#confirming-destructive-actions). |
| `duplicate_agent` | `agent_id`, valgfri `name` | — | Kopierer en agent i organisationen. |
| `delete_agent` | `agent_id`, `confirmation_token` i den anden anmodning | D, I | Sletter en agent permanent. To trin. |
| `list_agent_versions` | `agent_id` | R, I | Viser deployede konfigurationsversioner. |

### Telefonnumre og operatører

| Værktøj | Hovedargumenter | Annotationer | Hvad det gør |
| --- | --- | --- | --- |
| `list_phone_numbers` | — | R, I | Viser organisationens numre og routing. |
| `get_phone_number_limits` | — | R, I | Henter forbrug og grænser for administrerede numre. |
| `provision_phone_number` | valgfri `area_code`, `city`, `state`, `idempotency_key` | D, O | Køber et ThunderPhone-administreret indgående nummer. |
| `list_voip_connections` | — | R, I | Viser tilsluttede kundeteleoperatører. |
| `search_voip_numbers` | `connection_id`, `country`, `type`, valgfri `area_code` | R, I, O | Søger i teleoperatørens nummerbeholdning. |
| `import_voip_numbers` | `connection_id`, `numbers` | D, O | Importerer numre, der allerede ejes hos teleoperatøren. |
| `update_phone_number` | `phone_number_id`, routing-/etiket-/webhook-felter | D | Opdaterer nummerrouting, herunder tildeling af agent. |
| `delete_phone_number` | `phone_number_id`, `confirm`, valgfri `release_at_provider`, `confirmation_token` ved den anden anmodning | D, I, O | Frigiver et nummer. To trin. |

### SMS

| Værktøj | Vigtigste argumenter | Annotationer | Hvad det gør |
| --- | --- | --- | --- |
| `send_sms` | `from_number`, `to`, `body`, `idempotency_key` | D, I, O | Sender én SMS i ren tekst via et tilsluttet Twilio- eller Telnyx-nummer. |

### Opkald

| Værktøj | Primære argumenter | Annotationer | Hvad det gør |
| --- | --- | --- | --- |
| `list_calls` | valgfrie filtre, `limit`, `offset` | R, I | Viser opkald med REST-filtrene for opkaldshistorik. |
| `get_call` | `call_id` | R, I | Henter opkaldsstatus og metadata. |
| `get_call_transcript` | `call_id`, valgfri `live` | R, I | Henter opkaldstransskriptionen. |
| `get_call_audio_url` | `call_id`, valgfri `download` | R, I, O | Returnerer en signeret lyd-URL; den streamer aldrig lyd via MCP. |
| `get_call_grade` | `call_id` | R, I | Henter den seneste opkaldsvurdering. |
| `place_call` | `agent_id`, `from_number`, `to_number` | D, O | Foretager ét ikke-idempotent udgående opkald. |
| `export_calls` | opkaldsfiltre, `export_format` | R, I | Eksporterer op til REST-endpointets grænse som JSON eller CSV. |

### Test og validering

| Værktøj | Primære argumenter | Annotationer | Hvad det gør |
| --- | --- | --- | --- |
| `list_test_scenarios` | `agent_id` | R, I | Viser testscenarier. |
| `create_test_scenario` | `agent_id`, `title`, `scenario_prompt`, valgfri betingelser | — | Opretter et scenarie. |
| `generate_test_scenarios` | `agent_id`, valgfri `count`, `include_edge_cases`, `locale` | O | Genererer scenarier ud fra agentens prompt. |
| `run_agent_tests` | `agent_id`, `channel`, `consent_to_charge`, valgfrit udvalg/matrix | D, O | Kører scenarier via web eller telefoni. |
| `get_test_run` | `agent_id`, `batch_id` | R, I | Henter batchstatus og resultater pr. scenarie. |
| `list_validation_runs` | `agent_id` | R, I | Viser seneste valideringskørsler for kladder. |
| `get_validation_status` | `agent_id` | R, I | Henter den seneste valideringstilstand og kladdematch. |

### Viden

| Værktøj | Primære argumenter | Annoteringer | Hvad det gør |
| --- | --- | --- | --- |
| `list_knowledge_bases` | — | R, I | Viser en liste over vidensbaser. |
| `create_knowledge_base` | `name`, valgfri `description` | — | Opretter en vidensbase. |
| `add_knowledge_document` | `knowledge_base_id`, `name`, `content` | — | Tilføjer tekst eller Markdown. |
| `import_knowledge_url` | `url`, valgfri `name` | O | Sætter en offentlig side i kø til sikker indlæsning. |
| `search_knowledge` | `knowledge_base_id`, `query` | R, I | Søger via produktionshentning. |

### Integrationer, webhooks og eksterne MCP-servere

| Værktøj | Primære argumenter | Annoteringer | Hvad det gør |
| --- | --- | --- | --- |
| `list_integrations` | — | R, I | Viser HTTP-funktionsintegrationer. |
| `create_integration` | `display_name`, funktions-`spec`, valgfrie endpointfelter | — | Opretter et HTTP-værktøj. Tilføj godkendelsesheadere i dashboardet. |
| `test_integration` | `url`, valgfri metode/body/timeout, `integration_id` med `header_names`, `confirmation_token` ved den anden anmodning | D, O | Sender en afgrænset, SSRF-beskyttet testanmodning. Gemte headerværdier udfyldes fra integrationen og sendes kun til dens egen vært. `POST` (standarden), `PUT`, `PATCH` og `DELETE` foregår i to trin; `GET` kører med det samme. |
| `list_webhook_endpoints` | — | R, I | Viser signerede webhook-endpoints. |
| `list_webhook_deliveries` | valgfri `agent_id`, valgfri `endpoint_id` | R, I | Viser nylige resultater for webhook-leveringer uden payload. |
| `create_webhook_endpoint` | `label`, `url`, valgfrie hændelser/status | O | Opretter et signeret webhook-endpoint. |
| `test_webhook_endpoint` | `endpoint_id` | O | Sender en syntetisk hændelse gennem den normale levering. |
| `list_mcp_servers` | — | R, I | Viser fjernservere, som kan kaldes af stemmeagenter. |
| `create_mcp_server` | `display_name`, `url` | O | Registrerer og synkroniserer en fjernserver. Servere, der kræver godkendelsesheadere, tilføjes i dashboardet. |
| `sync_mcp_server_tools` | `server_id` | D, O | Opdaterer en fjernservers værktøjskatalog. |

### Kampagner

| Værktøj | Primære argumenter | Annoteringer | Hvad det gør |
| --- | --- | --- | --- |
| `list_campaigns` | — | R, I | Viser en liste over udgående kampagner. |
| `create_campaign` | kampagnefelter | — | Opretter en kampagnekladde. |
| `add_campaign_contacts` | `campaign_id`, `contacts` | — | Tilføjer op til 5.000 JSON-kontakter. |
| `campaign_action` | `campaign_id`, `action`, valgfri `consent_to_charge`, `confirmation_token` i den anden anmodning | D, O | Kører `start`, `pause`, `resume` eller `stop`. `start` og `resume` er i to trin; `pause` og `stop` køres med det samme. |
| `get_campaign_stats` | `campaign_id` | R, I | Henter tællere og seneste resultater. |

### Stemmer, fakturering og dokumentation

| Værktøj | Primære argumenter | Annoteringer | Hvad det gør |
| --- | --- | --- | --- |
| `list_voices` | — | R, I | Viser stemmer og understøttede sprog. |
| `preview_voice` | `voice`, `language`, `text` | O | Genererer en prøve og returnerer en signeret URL. |
| `list_voice_clones` | — | R, I | Viser brugerdefinerede stemmekloner. |
| `get_billing_summary` | — | R, I | Henter saldo og autoritative priser for niveauer; ingen betalingsændringer er tilgængelige. |
| `search_docs` | `query`, valgfri `limit` | R, I, O | Søger i det offentlige dokumentationsindeks. |
| `get_doc_page` | `path` | R, I, O | Henter én offentlig Markdown-dokumentationsside. |

Alle produktværktøjer bruger de samme REST-kodestier som det offentlige API. REST-validering, organisationsafgrænsning, roller, faktureringsadgang, kvoter, TCPA-bekræftelse, udbydersikkerhed og revisionsadfærd gælder derfor uændret.

## Bekræftelse af destruktive handlinger

Værktøjer markeret med D ændrer eller fjerner noget eller begynder at ringe til rigtige personer. De, der ikke kan fortrydes, kræver to anmodninger. Den første anmodning ændrer ikke noget og returnerer:

```json
{
  "status": "confirmation_required",
  "action": "Delete agent",
  "target": { "id": 195, "name": "Front Desk Receptionist" },
  "confirmation_token": "…",
  "expires_in_seconds": 600,
  "next_step": "…"
}
```

Assistenten viser brugeren, hvad der påvirkes, og beder om et ja. Derefter gentager den anmodningen med de samme argumenter plus `confirmation_token`. En token er gyldig i 10 minutter og dækker én organisation, ét værktøj og ét præcist sæt argumenter, så sletning af tre agenter kræver tre bekræftelser. `campaign_action` med `pause` eller `stop` springer dette trin over, så en kørende kampagne altid kan stoppes med det samme, og det samme gælder `test_integration` med `GET`. Nogle D-værktøjer kører i én anmodning, fordi D angiver deres effekt, ikke en bekræftelse på serversiden: `update_agent` erstatter det, kladden indeholdt (`discard_agent_draft` gendanner det), `deploy_agent` erstatter den aktive konfiguration, `update_phone_number` omdirigerer aktive opkald, `sync_mcp_server_tools` erstatter et fjernservers værktøjskatalog, `import_voip_numbers` omdirigerer numre til din operatør, `run_agent_tests` kan bruge kredit, `send_sms` og `place_call` kontakter en rigtig person (`place_call` beholder sin egen samtykkebekræftelse), og `provision_phone_number` køber et nummer. Din MCP-klient kan stadig bede dig om at godkende dem.

## Startprompter

`prompts/list` tilbyder fem genanvendelige arbejdsgange:

- `create_inbound_receptionist`
- `run_agent_tests`
- `buy_and_attach_number`
- `review_low_grade_calls`
- `add_url_to_agent_knowledge`

Brug `prompts/get` med det angivne promptnavn og dets deklarerede argumenter for at modtage en klar-til-kørsel-brugermeddelelse.

## Ressourcer

`resources/list` eksponerer offentlige, cachelagrede referencer:

| URI | Indhold |
| --- | --- |
| `thunderphone://docs/llms.txt` | Offentligt dokumentationsindeks. |
| `thunderphone://docs/quickstart` | Hurtigstart-Markdown. |
| `thunderphone://pricing` | Aktuel offentlig pris-Markdown. |

Læs en ressource med `resources/read`. Offentlige hentninger bruger en kort timeout, en grænse på 2 MiB og en ti minutters cache i processen.

## Protokol og fejl

Serveren understøtter protokolversionerne `2025-06-18` og `2025-03-26`; den gengiver en understøttet klientversion og vælger ellers `2025-06-18`. Den implementerer `initialize`, `ping`, værktøjer, prompter, ressourcer og notifikationer. Notifikationer returnerer `202 Accepted`. Denne tilstandsløse server eksponerer ikke en SSE-lytter eller sletning af sessioner, så `GET` og `DELETE` returnerer `405 Method Not Allowed` med `Allow: POST`.

Værktøjsfejl forbliver vellykkede JSON-RPC-svar med `isError: true`. Deres tekst indeholder en kort sætning efterfulgt af en JSON-blok:

```json
{
  "code": "insufficient_balance",
  "detail": "There is not enough prepaid balance.",
  "next_step": "Call get_billing_summary, add funds in Organization > Billing, then retry."
}
```

Det særskilte præfiks `outbound_tcpa_confirmation_required:` bevares for `place_call`. Ukendte JSON-RPC-metoder returnerer `-32601` i et HTTP-`200`-svar. JSON-RPC-batches understøttes ikke af MCP `2025-06-18` og returnerer en ren `-32600`-fejl for ugyldig anmodning.
