https://a.storyblok.com/f/270183/1368x665/4a37884823/25jul_dev-blog_agentic-ai.jpg

Serveur MCP de téléphonie pour l'IA agentique et les modèles de langage

Publié le July 22, 2025

Temps de lecture : 9 minutes

Introduction au MCP (Model-Context Protocol)

Le protocole modèle-contexte (MCP) est une spécification qui permet aux grands modèles de langage (LLMS) de découvrir et d'utiliser des outils et des services externes. Il s'agit d'un langage universel qui permet aux LLM de communiquer avec des API, des bases de données et d'autres applications de manière standardisée.

Dans ce tutoriel, vous apprendrez à créer des outils MCP qui peuvent s'intégrer à n'importe quelle application Agentic AI (comme Claude Desktop, Github Copilot ou Cursor) et qui peuvent passer des appels, envoyer des SMS et collecter les réponses à afficher dans l'application.

>> TL;DR: Vous pouvez trouver le code complet sur GitHub.

Claude AI welcome screen animation showing a prompt box with the text 'How can I help you today?' and quick-access buttons for Code, Write, Learn, and more.Animated view of Claude’s developer-friendly welcome screen asking, 'How was your day, Mr. Developer?' with contextual mode options like Code, Write, and Learn.

Pourquoi le programme MCP est-il utile ?

  • Extensibilité : Le MCP permet aux développeurs d'étendre les capacités des LLM au-delà de leurs connaissances intégrées. En créant des outils conformes au MCP, vous pouvez permettre à un modèle d'accéder à des informations en temps réel (comme les prévisions météorologiques ou les cours de la bourse), d'interagir avec des bases de connaissances privées ou de déclencher des actions dans d'autres systèmes (comme l'envoi d'un courrier électronique ou la réservation d'une réunion).

  • La normalisation : Elle permet aux modèles d'interagir avec les outils de manière cohérente, quelle que soit la mise en œuvre sous-jacente. Cela simplifie le processus de développement tant pour les créateurs d'outils que pour les développeurs de modèles.

  • Sécurité et contrôle : MCP permet un contrôle granulaire des outils auxquels un modèle peut accéder, garantissant que le modèle n'effectue que les actions pour lesquelles il est autorisé.

Conditions préalables

  • Connaissance de Python : Connaissance intermédiaire du langage de programmation Python et Python v3.13+.

  • Bureau Docker: L'application s'exécutera dans un environnement conteneurisé et utilise Docker Compose.

  • Bureau Claude Applications : Ce tutoriel utilise Clause, mais n'importe quelle application d'IA agentique, comme Cursor, Windsurf, ou GitHub Copilot livrée avec VSCode, peut également fonctionner.

  • Compte API Vonage: Pour passer des appels et communiquer avec des SMS, un compte Vonage est nécessaire. Celui-ci comprend une clé API, un secret API, un numéro virtuel long et une application Voice qui peut être créée depuis le tableau de bord de Vonage.

  • Ngrok Reverse Proxy: Agir en tant que Webhook pour collecter des événements tels que la progression des appels et les SMS entrants.

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Comment fonctionne MCP : Un exemple d'outil météorologique

Pour comprendre le fonctionnement de MCP, prenons un exemple simple : un serveur météorologique. L'interaction est gérée par un client MCPqui s'exécute localement en tant que plugin de l'application LLM ou Agentic AI. Ce client est chargé de communiquer avec le serveur MCP distant.

  1. Invitation de l'utilisateur : Un utilisateur demande au LLM : "Quel temps fait-il à Londres ?"

  2. LLM vers MCP Client : Le LLM comprend l'intention de l'utilisateur et utilise son plugin MCP Client local pour trouver un outil approprié.

  3. Découverte d'outils (Client -> Serveur) : Le client MCP envoie une demande au serveur MCP pour découvrir les outils disponibles.

  4. Sélection d'outils : Le serveur MCP répond par une liste d'outils, notamment get_weather(location : str). Le LLM, via le client, sélectionne cet outil.

  5. Invocation de l'outil (client -> serveur) : Le client MCP envoie une demande au serveur MCP pour qu'il exécute l'outil get_weather avec le paramètre location="Londres".

  6. Exécution : Le serveur MCP reçoit la demande, exécute la fonction sous-jacente (qui appelle à son tour une API météorologique) et obtient le temps qu'il fait à Londres.

  7. Réponse (serveur -> client -> LLM) : Le serveur renvoie le résultat (par exemple, "Le temps à Londres est de 15°C et nuageux") au client MCP, qui le transmet à son tour au LLM.

  8. Réponse finale : Le LLM formate ces informations en une réponse conviviale et la présente à l'utilisateur.

Ce flux de travail montre comment le client MCP agit comme un pont local, tandis que le serveur MCP fournit les fonctionnalités de l'outil, créant ainsi une connexion transparente entre le modèle linguistique et les capacités externes.

Diagram with five columns (User, LLM, MCP Client, MCP Server, Weather API) illustrating message exchanges to process a weather request for London and return the result.Sequence diagram showing how a user query about London's weather flows through an LLM, MCP Client, MCP Server, and Weather API to return a response.

Qu'est-ce qu'un serveur MCP de téléphonie ?

Le serveur Telephony MCP Server est un serveur basé sur Python qui expose les fonctionnalités de communication de Vonage sous la forme d'un ensemble d'outils par le biais du protocole Modèle-Contexte. Il agit en tant qu'intermédiaire, traduisant les demandes d'un modèle de langage en appels API à la plateforme Vonage et renvoyant les résultats.

Ce serveur MCP exploite la suite d'API de communication de Vonage. Ces API vous permettent de passer et de recevoir des appels téléphoniques de manière programmatique, d'envoyer des messages comme RCS, SMS, WhatsApp, de créer des applications vidéo WebRTC, et bien d'autres choses encore.

L'utilisation de ces API permet à un modèle de langage, tel que Claude, d'effectuer des actions de téléphonie, comme passer des appels et envoyer des messages texte, en utilisant simplement les outils fournis par le serveur.

Liste des outils Vonage dans Telephony MCP Server

Le serveur MCP Téléphonie est livré avec un ensemble d'outils pré-intégrés pour les tâches courantes de téléphonie :

  • voice_call(to : str, message : str, from_ : str = "VONAGE_LVN"): Lance un appel vocal vers un numéro spécifié et énonce un message.

  • send_sms(to : str, text : str, from_ : str = "VONAGE_LVN"): Envoie un message SMS à un numéro spécifié.

  • check_call_status(call_uuid : str = None): Vérifie l'état d'un appel spécifique ou dresse la liste de tous les appels actifs.

  • voice_call_with_input(to : str, prompt_message : str, from_ : str = "VONAGE_LVN", wait_for_result : bool = True): Passe un appel vocal, joue un message d'invite et utilise la reconnaissance vocale pour capturer la réponse du destinataire.

  • sms_avec_entrée(to : str, text : str, from_ : str = "VONAGE_LVN", wait_for_result : bool = True): Envoie un SMS et attend la réponse du destinataire.

Fonctionnement de l'outil send_sms

Passons en revue le processus d'utilisation de la fonction envoyer_sms avec un modèle linguistique comme Claude, qui interagit avec le serveur par l'intermédiaire d'un client MCP local.

  1. L'utilisateur : "Hé Claude, peux-tu envoyer un message à mon ami au +1-202-555-0183 pour lui dire que j'ai 10 minutes de retard pour notre réunion ?"

  2. Claude (LLM) : Comprend l'intention de l'utilisateur d'envoyer un SMS. Il sait, grâce à son intégration MCP, qu'un message send_sms est disponible.

  3. Claude (utilisation de l'outil via le client MCP) : Par l'intermédiaire de son client MCP local, Claude adresse une demande au serveur MCP de téléphonie, en invoquant la fonction envoyer_sms avec les paramètres :

    • à: "+12025550183"

    • texte: "Bonjour, j'ai 10 minutes de retard pour notre réunion".

  4. Téléphonie Serveur MCP : Reçoit la demande du client MCP. Il construit et envoie ensuite une demande d'API à l'API SMS de Vonage avec les détails fournis.

  5. API Vonage : Traite la demande et envoie le SMS au téléphone du destinataire. Elle renvoie ensuite un état de réussite au serveur MCP de téléphonie.

  6. Téléphonie Serveur MCP vers Client : Le serveur met en forme l'état de réussite de Vonage et le renvoie au client MCP.

  7. Claude (réponse) : Le MCP Client transmet la confirmation de succès à Claude, qui informe alors l'utilisateur : "Ok, j'ai envoyé le message à votre ami".

Diagram with six columns (User, Claude, MCP Client, Telephony MCP Server, Vonage SMS API, Recipient) showing the process of sending a text message through the Vonage SMS API and confirming success.Sequence diagram illustrating how Claude uses MCP and the Vonage SMS API to send a message on behalf of a user.

Comment configurer le serveur MCP de téléphonie

Étape 1 : Cloner le référentiel

git clone https://github.com/Vonage-Community/telephony-mcp-server
cd telephony-mcp-server

Étape 2 : Ouvrir un tunnel ngrok

Pour recevoir des webhooks de Vonage, votre serveur local doit être accessible sur Internet. Utilisez ngrok pour exposer votre serveur, ouvrez un nouvel onglet dans votre terminal et exécutez :

ngrok http 8080

Le résultat sera à peu près le suivant :

Session Status                online
Version                       3.22.1
Forwarding                    https://4cc705fd88d9.ngrok.app -> http://localhost:8080

Dans l'exemple ci-dessus, ngrok a créé et attribué un nom de domaine accessible par Internet https://4cc705fd88d9.ngrok.appqui peut transférer le trafic vers le serveur de rappel hébergé localement et fonctionnant sur le port 8080. Nous l'utiliserons dans le fichier de configuration .env comme suit :

CALLBACK_SERVER_URL=https://4cc705fd88d9.ngrok.app

Vous pouvez en savoir plus sur les tests avec ngrok dans notre portail d'outils pour les développeurs.

Étape 3 : Créer une application Vonage

Connectez-vous au tableau de bord du développeur Vonage et créez une nouvelle application. Générez et téléchargez une clé privée et placez-la à la racine du répertoire du projet. Elle sera copiée dans le conteneur Docker.

Activez les fonctionnalités Voice et Messages, comme indiqué ci-dessous. Vous devrez également configurer les points de terminaison du webhook pour chaque fonctionnalité ; toutefois, comme nous n'utiliserons pas ces points de terminaison, vous pouvez vous contenter d'ajouter des caractères de remplacement.

Pour Voice :

  • URL de la réponse : https://4cc705fd88d9.ngrok.app/ncco

  • URL de l'événement : https://4cc705fd88d9.ngrok.app/event

Pour les messages :

  • URL entrant : https://4cc705fd88d9.ngrok.app/event

  • URL de l'état : https://4cc705fd88d9.ngrok.app/event

Screenshot of the Vonage API Dashboard's 'Edit Application' page, where a user sets up a Telephony MCP Server with webhook URLs for voice and messages, and an option to generate a public/private key pair.Creating a Vonage application for a Telephony MCP Server in the Vonage API Dashboard, showing the configuration of Voice and Messages capabilities, webhook URLs, and key generation.

Étape 4 : Ajouter un Webhook entrant pour recevoir des SMS

À partir du tableau de bord du développeur de Vonage, allez à Vos Numbers et modifiez le numéro que vous souhaitez utiliser en cliquant sur l'icône en forme de crayon. Dans la section 'Inbound Webhook URL' de la fenêtre de configuration, ajoutez l'url ngrok complétée par '/event', par ex. https://4cc705fd88d9.ngrok.app/event.

Screenshot showing the configuration of an inbound SMS webhook URL for a Vonage virtual number (+44 7520669992) in the 'Your Numbers' section of the Vonage API Dashboard.Configuring the inbound SMS webhook URL for a Vonage virtual number in the Dashboard under 'Your Numbers' settings.

Une fois la configuration sauvegardée, tout SMS envoyé au numéro virtuel ci-dessus sera transféré à https://4cc705fd88d9.ngrok.app/event

Étape 5 : Ajouter vos informations d'identification Vonage

Créer un fichier nommé .env à la racine du projet.

touch .env

Remplissez-le avec vos informations d'identification Vonage :

VONAGE_API_KEY=your_api_key
VONAGE_API_SECRET=your_api_secret
VONAGE_APPLICATION_ID=your_application_id
VONAGE_PRIVATE_KEY_PATH=/app/private.key # Path inside the container
VONAGE_LVN=your_vonage_long_virtual_number
CALLBACK_SERVER_URL=https://<ngrok_generated_url>

Démarrer le serveur MCP de téléphonie avec Docker

Le projet utilise Docker Compose pour simplifier l'exécution des services nécessaires.

  1. Construire et démarrer le conteneur

À partir de la racine du répertoire du projet, exécutez la commande suivante :

docker-compose up --build

Cette commande va :

  1. Construire une image Docker unique pour l'application.

  2. Démarrez un conteneur qui exécute deux services en interne : le service telephony-mcp-server et le serveur de rappelchacun sur un port différent.

  3. Les services démarreront au premier plan, ce qui vous permettra de surveiller leurs journaux directement dans votre terminal.

2. Verify the Servers are Running (Vérifier que les serveurs fonctionnent)

  • Le serveur MCP de téléphonie sera disponible à l'adresse suivante http://localhost:8000.

  • Le serveur de rappel fonctionnera sur http://localhost:8080.

Intégration du serveur MCP de téléphonie avec Claude

Vous pouvez intégrer le serveur MCP de téléphonie avec Claude par l'intermédiaire de clients qui supportent MCP, comme l'application Claude Desktop.

  • Ouvrez les paramètres du bureau de Claude : Naviguez vers Claude > Réglages > Développeur > Modifier la configuration pour ouvrir claude_desktop_config.json pour ouvrir le fichier claude_desktop_config.json.

Screenshot showing Claude's Settings panel open to the Developer tab with the 'Edit Config' button highlighted, alongside the file path to the claude_desktop_config.json file in Finder.Step-by-step instructions to access and edit the Claude desktop MCP configuration file via Developer Settings.

  • Ajouter la configuration du serveur MCP de téléphonie : Saisir le fichier json suivant dans claude_desktop_config.json:

{
  "mcpServers": {
    "telephony": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://127.0.0.1:8000/mcp"
      ]
    }
  }
}

Enregistrez le fichier json, quittez et redémarrez Claude pour que ces changements soient pris en compte.

  • Validez que Claude est connecté : Allez dans Claude > Paramètres > Développeur. Il devrait y avoir une entrée 'telephony' avec le statut 'running'.

Developer tab in Claude's settings interface showing the 'telephony' tool running, with command set to 'npx' and arguments pointing to a local MCP endpoint.Claude's Developer settings showing the 'telephony' tool actively running with an MCP remote endpoint configured via NPX.

Exécution des outils MCP dans Claude Desktop

Une fois intégré, vous pouvez commencer à donner à Claude des commandes qui utilisent les outils de téléphonie. Vous pouvez vérifier la disponibilité des outils dans le menu "Recherche et outils" :

Claude desktop interface with the prompt input box and expanded tools menu showing toggles for MCP tools such as voice_call, send_sms, and check_call_status.Screenshot showing Claude’s prompt interface with MCP tools like send_sms and voice_call enabled via the tools menu.

Imaginons que vous souhaitiez demander à un ami s'il est libre pour dîner. Essayez d'envoyer à Claude l'invite suivante : "Envoyez un message à Jane au +1-202-555-0125 et demandez-lui si elle est libre pour dîner ce soir".

Claude reconnaîtra l'intention et l'outil requis. Il vous montrera peut-être une confirmation avant de l'exécuter :

Tool: send_sms
to: "+12025550125"
text: "Hi Jane, are you free for dinner tonight?"

[Execute] [Cancel]

Après votre accord, Claude utilisera l'outil et vous donnera une confirmation finale :

"J'ai envoyé le message à Jane."

Plus tard, vous pourrez utiliser un autre outil :

"Appelle Jane pour voir si elle a eu mon message."

Et Claude utiliserait la fonction appel_vocal pour vous mettre en relation.

Chat interface showing Claude sending an SMS via the sms_with_input tool, retrying after no response, and receiving a positive reply confirming the recipient likes ice cream.Conversation with Claude using the sms_with_input MCP tool to send and follow up on a message asking if someone likes ice cream.

Conclusion et remarques finales

Le serveur MCP de téléphonie est un exemple puissant de la manière dont le protocole modèle-contexte peut combler le fossé entre les modèles de langage avancés et les actions du monde réel. En fournissant un moyen standardisé pour les MCP d'accéder aux API de communication, nous débloquons une nouvelle classe d'applications où les assistants IA peuvent interagir avec le monde en notre nom d'une manière significative et tangible.

Ce projet sert non seulement d'outil pratique, mais aussi de modèle pour étendre les capacités des modèles linguistiques à tout domaine disposant d'une API. Les possibilités ne sont limitées que par notre imagination.

Vous avez des questions ou des commentaires sur ce tutoriel ? Téléchargez le code et d'autres projets géniaux à partir de Vonage-Communauté. La participation de la communauté est toujours la bienvenue. Partagez vos idées avec nous sur X (anciennement Twitter) ou rejoignez la discussion dans notre canal Slack de la communauté Vonage en citant cet article pour une réponse rapide. Vous pouvez également vous connecter avec moi sur Twitter.

Partager:

https://a.storyblok.com/f/270183/400x400/620f535ce9/atique-khan.jpg
Atique Khan

Atique is a computer graduate and proficient Python developer with a passion for exploring new technologies. With a strong background in programming and system engineering, he holds over 10 years of experience in automation, testing, and integration. His interests span single-board computers, software-defined radios, and continuous experimentation with generative AI tools.