A full-stack agentic application bridging Google's Gemini 2.0 Flash with Airbnb data via the OpenBNB project and Model Context Protocol (MCP). This project enables AI agents to autonomously plan trips, search for specific listings, and analyze accommodation data using advanced scraping and direct booking logic.
Gemini-MCP-Openbnb empowers AI agents to act as intelligent travel concierges. By exposing OpenBNB's Airbnb search capabilities through an MCP Server, the Gemini agent can query real-time listing availability, prices, and amenities, all controlled by a cutting-edge frontend.
- AI-Driven Frontend: Built entirely using Google Antigravity powered by Gemini 3.0 Pro (High) for a futuristic "vibe coding" experience.
- Intelligent Backend: Uses LangGraph to define cyclical agentic workflows (e.g., "Search -> Refine -> Compare").
- Travel Logic: Integrates with the OpenBNB project to bypass standard API limitations, allowing for direct search and "Book Direct" link discovery.
- Observability: Integrated with LangSmith for deep tracing of the travel planning process.
- MCP Standard: Adheres to the Model Context Protocol, making the travel tools plug-and-play for any MCP-compliant client.
- Engine: Gemini 3.0 Pro (High)
- Framework: React / TypeScript (Next.js)
- Styling: Tailwind CSS / CSS Modules
- Generation Platform: Google Antigravity
- Language: Python
- Agent Framework: LangGraph (Stateful orchestration)
- Tracing & Eval: LangSmith
- Integration: OpenBNB (Airbnb Search Logic)
- Protocol: Model Context Protocol (MCP)
Gemini-MCP-Openbnb/
βββ backend/ # The MCP Server & Agent Logic
β βββ agent.py/ # Source code for agents and tools
β βββ requirements.txt # Python dependencies (langgraph, mcp, etc.)
β βββ langgraph.json
βββ frontend/ # The AI-Generated UI
β βββ src/
β βββ public/
β βββ package.json
βββ .env.example # Secrets (API Keys)
βββ README.md # This documentation
The following diagram illustrates how the Frontend (Gemini 3.0 generated) connects to the Backend Agent, which then uses MCP to "speak" to the OpenBNB tools.
This flow shows how the agent processes a travel request, loops to refine search criteria if needed, and outputs a final itinerary.
The backend is the brain of the operation, designed to handle complex travel logic.
agent.py: Defines the LangGraph workflow. It creates a graph of nodes (Reasoning, Tool Execution) that the agent traverses to fulfill travel queries.- LangSmith Integration: Every step of the agent's execution is logged to LangSmith, allowing for real-time debugging of the "thought process."
Follow these steps to clone and run the project locally.
- Python 3.10+
- Node.js 18+
- Git
- LangSmith API Key (optional, for tracing)
git clone https://github.com/aryannverse/Gemini-MCP-Openbnb.git
cd Gemini-MCP-Openbnbcd backend
# Create a virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtConfiguration: Create a .env file in the backend/ directory based on .env.example:
LANGCHAIN_API_KEY=your_langsmith_key
LANGCHAIN_TRACING_V2=true
GEMINI_API_KEY=your_google_ai_keyRun the MCP Server
python agent.pycd frontend
npm install # Install dependencies
npm run dev # Start the development serverThe frontend should now be running on http://localhost:3000 and the backend on http://localhost:2024
To enable the Gemini Agent (in Antigravity or a desktop client) to use your backend tools:
- Ensure your Backend MCP Server is running.
- Configure your MCP Client (e.g., config file in Antigravity or Claude Desktop).
- Add the server command:
"mcpServers": { "airbnb-agent": { "command": "python", "args": ["/absolute/path/to/Gemini-MCP-Openbnb/backend/server.py"] } }
The frontend communicates with the backend via API endpoints or through the MCP connection depending on the architecture.
- Direct API: Ensure the
API_BASE_URLinfrontend/.envpoints to your running backend (e.g.,http://localhost:8000). - Agentic: The frontend sends natural language prompts to Gemini, which then calls the MCP tools running in your backend to fetch data, returning the result to the UI.
Built with β€οΈ by aryannverse