---
title: "Använd ThunderPhone som en MCP-server"
description: "Bygg, testa, validera och hantera ThunderPhone-röstagenter från Claude, ChatGPT, Claude Code, Codex, Cursor, VS Code eller en annan Streamable HTTP MCP-klient."
---

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

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

Detta är motsatt riktning jämfört med att [ansluta en fjärransluten MCP-server till en röstagent](/sv/guides/mcp-servers):

| Riktning | Resultat |
| --- | --- |
| Fjärransluten MCP-server → ThunderPhone-agent | En röstagent kan anropa verktygen på fjärrservern. |
| ThunderPhone → din MCP-klient | Din kodningsagent kan bygga, testa och administrera ThunderPhone. |

## Autentisera

Använd [OAuth](/sv/guides/oauth) som standard för katalogklienter: logga in, välj en organisation och godkänn de begärda behörigheterna. Återkalla åtkomst under **Organisation → API-nycklar → Auktoriserade appar**.

För klienter som konfigurerats med en API-nyckel skapar du en `sk_live_`-nyckel under **Organisation → Nycklar** och exponerar den för din MCP-klient som `THUNDERPHONE_API_KEY`. Nyckeln är bunden till en organisation; ett ID som ägs av en annan organisation behandlas som om det inte hittades.

<Warning>
  En `sk_live_`-nyckel kan läsa organisationsdata och utföra produktionsåtgärder, till exempel distribuera agenter, ringa samtal, köpa nummer, starta kampanjer och ta bort resurser. Håll den borta från webbläsarkod, kodförråd, skärmbilder och chattloggar. Använd klientens hemlighetslagring eller miljöstöd och återkalla en exponerad nyckel omedelbart.
</Warning>

## CLI- och stdio-alternativ

[ThunderPhone CLI](/sv/guides/cli) kan skriva klientkonfiguration samtidigt som
andra servrar bevaras:

```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 av `@thunderphone/mcp` använder du `thunderphone-mcp setup` med
samma alternativ. Konfigurationen stöder Claude Code, Codex, Cursor, VS Code, Gemini, Claude
Desktop och Windsurf. Direkt HTTP rekommenderas; Desktop använder stdio.

För alla klienter som stöder stdio konfigurerar du `command: "npx"` med
`args: ["-y", "@thunderphone/mcp"]`. Wrappen använder först `THUNDERPHONE_API_KEY`,
sedan autentiseringsuppgifter från `thunderphone login`, uppdaterar utgångna token och därefter
OAuth via `mcp-remote`. Enhetsinloggning och OAuth kräver motsvarande API-
OAuth-utrullning. API-nyckelsökvägen gör inte det. Direkta HTTP-konfigurationer läser inte
CLI:ts autentiseringslagring; använd stdio-wrappen för att återanvända enhetsinloggning.

Dessa är alternativ till de manuella klientkonfigurationerna nedan.

## Klientkonfiguration

Claude och ChatGPT loggar in med [OAuth](/sv/guides/oauth); ingen API-nyckel används. Om du ännu inte har ett ThunderPhone-konto väljer du **Skapa konto** på inloggningssidan och återvänder till godkännandeskärmen efter att du har verifierat din e-postadress.

### Claude (webb, dator och mobil)

1. Öppna **Anpassa → Anslutningar** (**Inställningar → Anslutningar** i äldre versioner). Om ThunderPhone visas i anslutningskatalogen väljer du det. Annars väljer du **Lägg till egen anslutning**, namnger den `ThunderPhone` och anger `https://api.thunderphone.com/v1/mcp`.
2. Välj **Anslut**, logga in på ThunderPhone, välj organisation och godkänn behörigheterna.
3. Aktivera ThunderPhone i verktygsmenyn i en chatt och be om det du behöver, till exempel ”Lista mina agenter”.

Claude frågar innan det använder varje verktyg för första gången. För att hoppa över de flesta av dessa uppmaningar öppnar du **Anpassa → Anslutningar → ThunderPhone** och ställer in **Skrivskyddade verktyg** på alltid tillåtna. Dessa verktyg hämtar bara information: agenter, samtal, transkriptioner, saldon och dokumentation. Låt **Verktyg för att skriva/ta bort** kräva godkännande om du vill se varje ändring innan den sker.

Egna anslutningar kräver en betald Claude-plan. I Team- och Enterprise-planer lägger en ägare först till anslutningen i organisationens anslutningsinställningar, och sedan ansluter varje medlem sitt eget ThunderPhone-konto.

### ChatGPT

1. Om ThunderPhone visas i ChatGPT:s appkatalog väljer du det och ansluter.
2. Annars öppnar du **Inställningar → Appar och anslutningar → Avancerade inställningar**, aktiverar **Utvecklarläge** och skapar en anslutning med URL:en `https://api.thunderphone.com/v1/mcp` och OAuth-autentisering.
3. Logga in på ThunderPhone, välj organisation och godkänn behörigheterna. Lägg till ThunderPhone i en chatt från verktygsmenyn.

Om du raderar en agent eller ett telefonnummer, kasserar ett utkast, startar en kampanj eller skickar en testbegäran som kan skriva till ett externt system krävs en andra bekräftelse i båda apparna. Se [Bekräfta destruktiva åtgärder](#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

Lägg till detta i `~/.codex/config.toml`:

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

### Cursor

Skapa `.cursor/mcp.json`:

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

### Claude Desktop

Lägg till en `mcp-remote`-brygga i Claude Desktops konfiguration:

```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

Skapa `.vscode/mcp.json` och ange nyckeln via VS Codes inmatningsdialog:

```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}"
      }
    }
  }
}
```

## Verktyg

Varje verktyg har MCP-annoteringar. I tabellerna betyder **R** skrivskyddad, **D** destruktiv, **I** idempotent och **O** interaktion med omvärlden/nätverket. Ett streck betyder att ingen indikator är angiven.

### Anslutning

| Verktyg | Huvudargument | Annoteringar | Funktion |
| --- | --- | --- | --- |
| `get_connection_identity` | — | R, I | Validerar autentiseringsuppgifterna och returnerar dess organisation samt säker metadata om autentiseringsuppgifterna. |

### Agenter

| Verktyg | Huvudargument | Anteckningar | Vad det gör |
| --- | --- | --- | --- |
| `list_agents` | — | R, I | Listar agenter. |
| `get_agent` | `agent_id` | R, I | Hämtar en agent. |
| `create_agent` | agentkonfiguration | — | Skapar en agent. |
| `update_agent` | `agent_id`, ändrade fält | D | Lagrar fält i agentutkastet och ersätter det som fanns i utkastet. Körs utan bekräftelsesteg: den driftsatta agenten är oförändrad tills `deploy_agent`, och `discard_agent_draft` återställer utkastet. |
| `deploy_agent` | `agent_id`, valfritt `if_updated_at` | D, I | Befordrar utkastet till produktion. |
| `discard_agent_draft` | `agent_id`, valfritt `if_updated_at`, `confirmation_token` i den andra begäran | D, I | Kasserar mellanlagrade ändringar. Två steg, se [Bekräfta förstörande åtgärder](#confirming-destructive-actions). |
| `duplicate_agent` | `agent_id`, valfritt `name` | — | Kopierar en agent inom organisationen. |
| `delete_agent` | `agent_id`, `confirmation_token` i den andra begäran | D, I | Tar permanent bort en agent. Två steg. |
| `list_agent_versions` | `agent_id` | R, I | Listar driftsatta konfigurationsversioner. |

### Telefonnummer och operatörer

| Verktyg | Huvudargument | Anteckningar | Vad det gör |
| --- | --- | --- | --- |
| `list_phone_numbers` | — | R, I | Listar organisationens nummer och dirigering. |
| `get_phone_number_limits` | — | R, I | Hämtar användning och gränser för hanterade nummer. |
| `provision_phone_number` | valfritt `area_code`, `city`, `state`, `idempotency_key` | D, O | Köper ett inkommande nummer som hanteras av ThunderPhone. |
| `list_voip_connections` | — | R, I | Listar anslutna kundoperatörer. |
| `search_voip_numbers` | `connection_id`, `country`, `type`, valfritt `area_code` | R, I, O | Söker i operatörens nummerinventarie. |
| `import_voip_numbers` | `connection_id`, `numbers` | D, O | Importerar nummer som redan ägs hos operatören. |
| `update_phone_number` | `phone_number_id`, fält för dirigering/etikett/webhook | D | Uppdaterar nummerdirigering, inklusive agenttilldelning. |
| `delete_phone_number` | `phone_number_id`, `confirm`, valfritt `release_at_provider`, `confirmation_token` vid den andra begäran | D, I, O | Frisläpper ett nummer. I två steg. |

### SMS

| Verktyg | Huvudargument | Anteckningar | Vad det gör |
| --- | --- | --- | --- |
| `send_sms` | `from_number`, `to`, `body`, `idempotency_key` | D, I, O | Skickar ett SMS i klartext via ett anslutet Twilio- eller Telnyx-nummer. |

### Samtal

| Verktyg | Huvudargument | Anteckningar | Vad det gör |
| --- | --- | --- | --- |
| `list_calls` | valfria filter, `limit`, `offset` | R, I | Listar samtal med REST-filtren för samtalshistorik. |
| `get_call` | `call_id` | R, I | Hämtar samtalsstatus och metadata. |
| `get_call_transcript` | `call_id`, valfritt `live` | R, I | Hämtar samtalstranskriptionen. |
| `get_call_audio_url` | `call_id`, valfritt `download` | R, I, O | Returnerar en signerad ljud-URL; ljud strömmas aldrig via MCP. |
| `get_call_grade` | `call_id` | R, I | Hämtar den senaste samtalsbedömningen. |
| `place_call` | `agent_id`, `from_number`, `to_number` | D, O | Ringer ett icke-idempotent utgående samtal. |
| `export_calls` | samtalsfilter, `export_format` | R, I | Exporterar upp till REST-slutpunktens gräns som JSON eller CSV. |

### Testning och validering

| Verktyg | Huvudargument | Kommentarer | Funktion |
| --- | --- | --- | --- |
| `list_test_scenarios` | `agent_id` | R, I | Visar testscenarier. |
| `create_test_scenario` | `agent_id`, `title`, `scenario_prompt`, valfria villkor | — | Skapar ett scenario. |
| `generate_test_scenarios` | `agent_id`, valfria `count`, `include_edge_cases`, `locale` | O | Genererar scenarier från agentens prompt. |
| `run_agent_tests` | `agent_id`, `channel`, `consent_to_charge`, valfritt urval/matris | D, O | Kör scenarier via webben eller telefoni. |
| `get_test_run` | `agent_id`, `batch_id` | R, I | Hämtar batchstatus och resultat per scenario. |
| `list_validation_runs` | `agent_id` | R, I | Visar senaste valideringskörningar för utkast. |
| `get_validation_status` | `agent_id` | R, I | Hämtar den senaste valideringsstatusen och matchningen för utkastet. |

### Kunskap

| Verktyg | Huvudargument | Annoteringar | Funktion |
| --- | --- | --- | --- |
| `list_knowledge_bases` | — | R, I | Listar kunskapsbaser. |
| `create_knowledge_base` | `name`, valfri `description` | — | Skapar en kunskapsbas. |
| `add_knowledge_document` | `knowledge_base_id`, `name`, `content` | — | Lägger till text eller Markdown. |
| `import_knowledge_url` | `url`, valfri `name` | O | Köar en offentlig sida för säker inläsning. |
| `search_knowledge` | `knowledge_base_id`, `query` | R, I | Söker via hämtning i produktion. |

### Integrationer, webhooks och fjärranslutna MCP-servrar

| Verktyg | Huvudargument | Anteckningar | Vad det gör |
| --- | --- | --- | --- |
| `list_integrations` | — | R, I | Listar HTTP-funktionsintegrationer. |
| `create_integration` | `display_name`, funktions-`spec`, valfria slutpunktsfält | — | Skapar ett HTTP-verktyg. Lägg till autentiseringsrubriker i instrumentpanelen. |
| `test_integration` | `url`, valfri metod/brödtext/tidsgräns, `integration_id` med `header_names`, `confirmation_token` vid den andra begäran | D, O | Skickar en begränsad, SSRF-skyddad testbegäran. Sparade rubrikvärden fylls i från integrationen och skickas endast till dess egen värd. `POST` (standard), `PUT`, `PATCH` och `DELETE` sker i två steg; `GET` körs direkt. |
| `list_webhook_endpoints` | — | R, I | Listar signerade webhook-slutpunkter. |
| `list_webhook_deliveries` | valfritt `agent_id`, valfritt `endpoint_id` | R, I | Listar senaste utfall för webhook-leveranser utan nyttolast. |
| `create_webhook_endpoint` | `label`, `url`, valfria händelser/status | O | Skapar en signerad webhook-slutpunkt. |
| `test_webhook_endpoint` | `endpoint_id` | O | Skickar en syntetisk händelse via normal leverans. |
| `list_mcp_servers` | — | R, I | Listar fjärrservrar som kan anropas av röstagenten. |
| `create_mcp_server` | `display_name`, `url` | O | Registrerar och synkroniserar en fjärrserver. Servrar som behöver autentiseringsrubriker läggs till i instrumentpanelen. |
| `sync_mcp_server_tools` | `server_id` | D, O | Uppdaterar en fjärrservers verktygskatalog. |

### Kampanjer

| Verktyg | Huvudargument | Annoteringar | Funktion |
| --- | --- | --- | --- |
| `list_campaigns` | — | R, I | Listar utgående kampanjer. |
| `create_campaign` | kampanjfält | — | Skapar en utkastskampanj. |
| `add_campaign_contacts` | `campaign_id`, `contacts` | — | Lägger till upp till 5 000 JSON-kontakter. |
| `campaign_action` | `campaign_id`, `action`, valfri `consent_to_charge`, `confirmation_token` vid den andra begäran | D, O | Kör `start`, `pause`, `resume` eller `stop`. `start` och `resume` sker i två steg; `pause` och `stop` körs direkt. |
| `get_campaign_stats` | `campaign_id` | R, I | Hämtar räknare och nyliga utfall. |

### Röster, fakturering och dokumentation

| Verktyg | Huvudargument | Anmärkningar | Funktion |
| --- | --- | --- | --- |
| `list_voices` | — | R, I | Listar röster och språk som stöds. |
| `preview_voice` | `voice`, `language`, `text` | O | Genererar ett exempel och returnerar en signerad URL. |
| `list_voice_clones` | — | R, I | Listar anpassade röstkloner. |
| `get_billing_summary` | — | R, I | Hämtar saldo och auktoritativa priser för nivåer; inga betalningsändringar exponeras. |
| `search_docs` | `query`, valfritt `limit` | R, I, O | Söker i det offentliga dokumentationsindexet. |
| `get_doc_page` | `path` | R, I, O | Hämtar en offentlig Markdown-dokumentationssida. |

Alla produktverktyg använder samma REST-kodvägar som det offentliga API:et. REST-validering, organisationsavgränsning, roller, behörighetskontroll för fakturering, kvoter, TCPA-bekräftelse, leverantörssäkerhet och granskningsbeteende gäller därför utan förändringar.

## Bekräfta destruktiva åtgärder

Verktyg märkta med D ändrar eller tar bort något, eller börjar ringa riktiga personer. De som inte kan ångras kräver två förfrågningar. Den första förfrågan ändrar ingenting och returnerar:

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

Assistenten visar användaren vad som påverkas och ber om ett ja. Därefter upprepar den förfrågan med samma argument plus `confirmation_token`. En token är giltig i 10 minuter och gäller för en organisation, ett verktyg och en exakt uppsättning argument, så att ta bort tre agenter kräver tre bekräftelser. `campaign_action` med `pause` eller `stop` hoppar över det här steget så att en pågående kampanj alltid kan stoppas direkt, och detsamma gäller `test_integration` med `GET`. Vissa D-verktyg körs med en förfrågan eftersom D markerar deras effekt, inte en bekräftelse på serversidan: `update_agent` ersätter det som utkastet innehöll (`discard_agent_draft` återställer det), `deploy_agent` ersätter den aktiva konfigurationen, `update_phone_number` dirigerar om aktiva samtal, `sync_mcp_server_tools` ersätter en fjärrservers verktygskatalog, `import_voip_numbers` pekar om nummer till din operatör, `run_agent_tests` kan använda kredit, `send_sms` och `place_call` når en riktig person (`place_call` behåller sin egen samtyckesbekräftelse) och `provision_phone_number` köper ett nummer. Din MCP-klient kan fortfarande be dig att godkänna dem.

## Startprompter

`prompts/list` visar fem återanvändbara arbetsflöden:

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

Använd `prompts/get` med det angivna promptnamnet och dess deklarerade argument för att få ett körklart användarmeddelande.

## Resurser

`resources/list` exponerar offentliga, cachade referenser:

| URI | Innehåll |
| --- | --- |
| `thunderphone://docs/llms.txt` | Index över offentlig dokumentation. |
| `thunderphone://docs/quickstart` | Snabbstart i Markdown. |
| `thunderphone://pricing` | Aktuell offentlig prisinformation i Markdown. |

Läs en resurs med `resources/read`. Offentliga hämtningar använder en kort tidsgräns, en gräns på 2 MiB och en tiominuterscache i processen.

## Protokoll och fel

Servern stöder protokollversionerna `2025-06-18` och `2025-03-26`; den ekar en klientversion som stöds och väljer annars `2025-06-18`. Den implementerar `initialize`, `ping`, verktyg, prompter, resurser och notifieringar. Notifieringar returnerar `202 Accepted`. Denna tillståndslösa server exponerar ingen SSE-lyssnare eller sessionsradering, så `GET` och `DELETE` returnerar `405 Method Not Allowed` med `Allow: POST`.

Verktygsfel är fortfarande lyckade JSON-RPC-svar med `isError: true`. Deras text innehåller en kort mening följd av ett JSON-block:

```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 distinkta prefixet `outbound_tcpa_confirmation_required:` behålls för `place_call`. Okända JSON-RPC-metoder returnerar `-32601` i ett HTTP-`200`-svar. JSON-RPC-batchar stöds inte av MCP `2025-06-18` och returnerar ett tydligt `-32600`-fel för ogiltig förfrågan.
