Skip to main content
Glama
SaadBenth7o

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

F
license - not found
-
quality - not tested
D
maintenance

Maintenance

–Maintainers
–Response time
–Release cycle
–Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SaadBenth7o/MCP_FLIGHT-SEARCH-AGENT'

If you have feedback or need assistance with the MCP directory API, please join our Discord server