Open in
Använd ThunderPhone som en MCP-server
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å:
https://api.thunderphone.com/v1/mcpDetta är motsatt riktning jämfört med att ansluta en fjärransluten MCP-server till en röstagent:
| 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 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.
CLI- och stdio-alternativ
ThunderPhone CLI kan skriva klientkonfiguration samtidigt som andra servrar bevaras:
npx -y @thunderphone/mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
npx thunderphone mcp setup --client claude-desktop --scope userEfter 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; 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)
- Ö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
ThunderPhoneoch angerhttps://api.thunderphone.com/v1/mcp. - Välj Anslut, logga in på ThunderPhone, välj organisation och godkänn behörigheterna.
- 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
- Om ThunderPhone visas i ChatGPT:s appkatalog väljer du det och ansluter.
- 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/mcpoch OAuth-autentisering. - 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.
Claude Code
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:
[mcp_servers.thunderphone]
url = "https://api.thunderphone.com/v1/mcp"
bearer_token_env_var = "THUNDERPHONE_API_KEY"Cursor
Skapa .cursor/mcp.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:
{
"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:
{
"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. |
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:
{
"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_receptionistrun_agent_testsbuy_and_attach_numberreview_low_grade_callsadd_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:
{
"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.