Skip to main content
Glama
Flight Search MCP Server

Flight Search MCP Server

by SaadBenth7o

โœˆ๏ธ Flight Search Agent

Auteur : Saad Bendahou
Contexte : Projet acadรฉmique - Deep Learning / Intelligence Artificielle
Annรฉe : 2025


๐Ÿ“‹ Description

Flight Search Agent est un agent conversationnel intelligent dรฉveloppรฉ pour la recherche et la rรฉservation de vols. Le projet utilise le protocole MCP (Model Context Protocol) pour exposer des outils de recherche standardisรฉs, intรจgre Google Gemini API pour la comprรฉhension du langage naturel, et l'API Amadeus pour rรฉcupรฉrer des donnรฉes de vols rรฉelles en temps rรฉel.

L'interface web moderne est dรฉveloppรฉe avec FastAPI et offre une expรฉrience utilisateur immersive avec un arriรจre-plan animรฉ et des รฉtiquettes de villes flottantes.

๐ŸŽฏ Caractรฉristiques principales

  • โœ… Recherche de vols intelligente entre diffรฉrentes villes (Maroc, Europe, Monde)

  • โœ… Comprรฉhension du langage naturel : dates relatives ("demain", "la semaine prochaine")

  • โœ… Google Gemini API : LLM rapide et efficace (gemini-2.5-flash)

  • โœ… Protocole MCP : Exposition d'outils de recherche standardisรฉs

  • โœ… Intรฉgration API Amadeus : Donnรฉes de vols rรฉelles et professionnelles

  • โœ… Interface FastAPI : Interface web moderne avec HTML/CSS/JS personnalisรฉ

  • โœ… Multilingue : Support Franรงais et Anglais

  • โœ… Parsing de dates : Conversion automatique de dates naturelles

  • โœ… Validation stricte : L'application ne dรฉmarre que si les APIs sont configurรฉes


Related MCP server: Google Flights MCP Server

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         UTILISATEUR                              โ”‚
โ”‚                    (Interface Web FastAPI)                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    app_fastapi.py                                 โ”‚
โ”‚              - Endpoint / : Page HTML                             โ”‚
โ”‚              - Endpoint /chat : API REST                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  gemini_agent.py                                  โ”‚
โ”‚         - GeminiFlightAgent : Agent principal                     โ”‚
โ”‚         - Comprรฉhension du langage naturel                        โ”‚
โ”‚         - Extraction des paramรจtres (origine, destination, date)   โ”‚
โ”‚         - Formatage des rรฉponses                                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    flight_data.py                                 โ”‚
โ”‚         - search_flights() : Fonction principale                  โ”‚
โ”‚         - Gestion des donnรฉes de vols                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    amadeus_api.py                                โ”‚
โ”‚         - search_flights_amadeus() : Recherche rรฉelle             โ”‚
โ”‚         - get_airport_code() : Conversion ville โ†’ code IATA       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    date_parser.py                                โ”‚
โ”‚         - parse_date_with_context() : Parsing dates naturelles   โ”‚
โ”‚         - get_current_date_info() : Informations date actuelle    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    mcp_server.py (Optionnel)                      โ”‚
โ”‚         - Serveur MCP pour intรฉgration avec Cursor/Claude        โ”‚
โ”‚         - Exposition des mรชmes outils via protocole MCP          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Flux de donnรฉes

  1. Utilisateur envoie une requรชte via l'interface web

  2. FastAPI reรงoit la requรชte et appelle gemini_agent.chat()

  3. Gemini Agent analyse la requรชte et extrait les paramรจtres

  4. Flight Data appelle amadeus_api.search_flights_amadeus()

  5. Amadeus API retourne les donnรฉes de vols rรฉelles

  6. Gemini Agent formate la rรฉponse de maniรจre conviviale

  7. FastAPI retourne la rรฉponse formatรฉe ร  l'utilisateur


๐Ÿ“ Structure du Projet

Flight_Search_Agent/
โ”œโ”€โ”€ app_fastapi.py              # Application FastAPI principale
โ”œโ”€โ”€ gemini_agent.py            # Agent Gemini + logique conversation
โ”œโ”€โ”€ amadeus_api.py             # Intรฉgration API Amadeus
โ”œโ”€โ”€ flight_data.py             # Gestion des donnรฉes de vols
โ”œโ”€โ”€ date_parser.py             # Parseur de dates naturelles
โ”œโ”€โ”€ mcp_server.py              # Serveur MCP (optionnel)
โ”œโ”€โ”€ mcp_config.json            # Configuration MCP
โ”‚
โ”œโ”€โ”€ templates/                 # Templates HTML
โ”‚   โ””โ”€โ”€ index.html             # Interface web principale
โ”‚
โ”œโ”€โ”€ static/                     # Fichiers statiques
โ”‚   โ””โ”€โ”€ Bg.jpg                 # Image de fond
โ”‚
โ”œโ”€โ”€ requirements.txt           # Dรฉpendances Python
โ”œโ”€โ”€ .gitignore                 # Fichiers ignorรฉs par Git
โ”œโ”€โ”€ .env                       # Variables d'environnement (non versionnรฉ)
โ””โ”€โ”€ README.md                  # Documentation

๐Ÿ› ๏ธ Installation

Prรฉrequis

1. Cloner le projet

git clone <repository-url>
cd Flight_Search_Agent

2. Installer les dรฉpendances

pip install -r requirements.txt

3. Configurer les variables d'environnement

Crรฉez un fichier .env ร  la racine du projet :

GEMINI_API_KEY=votre_cle_gemini_ici
AMADEUS_CLIENT_ID=votre_client_id_ici
AMADEUS_CLIENT_SECRET=votre_client_secret_ici

Important : L'application ne dรฉmarrera PAS si ces variables ne sont pas configurรฉes ou si elles contiennent des valeurs placeholder.

4. Obtenir les clรฉs API

Google Gemini API (Gratuit)

  1. Allez sur Google AI Studio

  2. Connectez-vous avec votre compte Google

  3. Cliquez sur "Create API Key"

  4. Copiez votre clรฉ API

Amadeus API (Gratuit pour dรฉveloppeurs acadรฉmiques)

  1. Allez sur Amadeus for Developers

  2. Crรฉez un compte gratuit (compte acadรฉmique/non-lucratif)

  3. Crรฉez une nouvelle application

  4. Copiez votre Client ID et Client Secret


๐Ÿ’ป Utilisation

Lancer l'application FastAPI

python app_fastapi.py

L'application sera accessible sur : http://localhost:8000

Utiliser le serveur MCP (Optionnel)

Pour intรฉgrer avec Cursor/Claude Desktop :

python mcp_server.py

Puis configurez votre client MCP avec :

{
  "mcpServers": {
    "flight-search": {
      "command": "python",
      "args": ["mcp_server.py"],
      "cwd": "C:\\path\\to\\Flight_Search_Agent"
    }
  }
}

๐ŸŽฏ Exemples de Requรชtes

L'agent comprend des requรชtes en langage naturel :

"Je veux un vol de Casablanca ร  Paris demain"
"Trouve-moi un vol Marrakech - Bruxelles pour le 20 dรฉcembre"
"Quels vols sont disponibles de Rabat ร  Londres la semaine prochaine?"
"Vol pas cher de Fรจs ร  Barcelone le 15 janvier"

๐ŸŒ Villes Supportรฉes

Maroc ๐Ÿ‡ฒ๐Ÿ‡ฆ

  • Casablanca (CMN)

  • Marrakech (RAK)

  • Rabat (RBA)

  • Fรจs (FEZ)

  • Tanger (TNG)

  • Agadir (AGA)

Europe ๐Ÿ‡ช๐Ÿ‡บ

  • Paris (CDG/ORY)

  • Londres (LHR)

  • Madrid (MAD)

  • Barcelone (BCN)

  • Bruxelles (BRU)

  • Amsterdam (AMS)

Autres ๐ŸŒ

  • Dubaรฏ (DXB)

  • Istanbul (IST)

  • Montrรฉal (YUL)

  • New York (JFK)

  • Washington (DCA)


๐Ÿ”ง Technologies Utilisรฉes

  • FastAPI - Framework web moderne et rapide

  • Google Gemini API - LLM rapide et efficace (gemini-2.5-flash)

  • Amadeus API - API professionnelle de recherche de vols

  • MCP (Model Context Protocol) - Protocole d'exposition d'outils

  • Python 3.10+ - Langage de dรฉveloppement

  • Jinja2 - Moteur de templates HTML

  • HTML/CSS/JavaScript - Interface web personnalisรฉe


๐Ÿ“‹ Tools MCP Disponibles

1. search_flights

Recherche des vols entre deux villes avec date.

Paramรจtres :

  • origin : Ville de dรฉpart (ex: "Casablanca", "CMN")

  • destination : Ville d'arrivรฉe (ex: "Paris", "CDG")

  • date : Date de voyage au format YYYY-MM-DD

2. parse_date

Convertit une date naturelle en format ISO.

Paramรจtres :

  • date_expression : Date en langage naturel (ex: "demain", "le 20 dรฉcembre")

3. get_current_date

Retourne la date actuelle et rรฉfรฉrences.

4. list_airports

Liste les aรฉroports disponibles.


๐Ÿ› Dรฉpannage

Erreur "APIs non configurรฉes"

  • Vรฉrifiez que le fichier .env existe et contient les bonnes clรฉs

  • Vรฉrifiez que les clรฉs ne sont pas des placeholders

  • L'application ne dรฉmarre PAS sans APIs configurรฉes

Erreur "GEMINI_API_KEY not found"

  • Vรฉrifiez que vous avez dรฉfini la variable d'environnement GEMINI_API_KEY

  • Obtenez votre clรฉ sur Google AI Studio

Erreur "AMADEUS_CLIENT_ID not found"

  • Vรฉrifiez que vous avez dรฉfini les variables AMADEUS_CLIENT_ID et AMADEUS_CLIENT_SECRET

  • Crรฉez un compte sur Amadeus for Developers

Erreur de dรฉpendances

pip install -r requirements.txt

L'API Amadeus retourne une erreur

  • Vรฉrifiez que vous utilisez l'environnement "test" (par dรฉfaut)

  • Vรฉrifiez les limites de votre compte Amadeus (gratuit pour dรฉveloppeurs)

  • Vรฉrifiez que les codes d'aรฉroport sont corrects


๐Ÿ“ Notes de Dรฉveloppement

Validation des APIs

L'application valide strictement la prรฉsence des APIs au dรฉmarrage. Si les clรฉs sont manquantes ou contiennent des valeurs placeholder, l'application lรจve une exception et ne dรฉmarre pas.

Gestion des erreurs

  • Les erreurs API sont capturรฉes et retournรฉes de maniรจre conviviale ร  l'utilisateur

  • L'historique de conversation est maintenu pour amรฉliorer les rรฉponses

  • Les dates relatives sont automatiquement converties en format ISO

Interface utilisateur

  • Arriรจre-plan avec image de ciel et nuages

  • ร‰tiquettes de villes flottantes avec animations

  • Chat transparent avec bordures visibles

  • Barre d'astuces rabattable depuis le haut

  • Heure locale mise ร  jour en temps rรฉel


๐Ÿ“„ Licence

Ce projet est dรฉveloppรฉ dans un contexte acadรฉmique et non-lucratif.


๐Ÿ‘ค Auteur

Saad Bendahou
Projet acadรฉmique - Deep Learning / Intelligence Artificielle
Annรฉe 2025


๐Ÿ™ Remerciements

  • Google pour l'API Gemini

  • Amadeus pour l'API de recherche de vols (compte acadรฉmique)

  • La communautรฉ open-source Python


Dรฉveloppรฉ avec โค๏ธ pour l'apprentissage et la recherche acadรฉmique

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Integrates Google Flights data into AI workflows for natural language flight searches, price comparisons, flexible date searches, and multi-city itinerary planning with support for various cabin classes and passenger types.
      9
      8
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables flight and airport search capabilities through Skyscanner, allowing users to find flight options, compare prices, and locate airports using natural language.
      20
      GPL 3.0