Skip to content

2060-io/hologram-concieragent-demo-vs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Concieragent Logo

🌍 Concieragent

Your Multilingual AI Travel Concierge for Hologram

Orchestrating complex travel planning through MCP (Model Context Protocol) with multi-LLM support

TypeScript Node.js Python MCP

OpenAI Claude Ollama Hologram License


πŸ‡¬πŸ‡§ English β€’ πŸ‡ͺπŸ‡Έ EspaΓ±ol β€’ πŸ‡«πŸ‡· FranΓ§ais

Features β€’ Quick Start β€’ Configuration β€’ Architecture β€’ Deployment β€’ API Reference


🎯 What is Concieragent?

Concieragent is a production-ready, multilingual AI travel assistant that runs on the Hologram platform. It demonstrates the power of MCP (Model Context Protocol) by orchestrating 6 specialized travel planning servers with your choice of LLM backend.

✨ Key Highlights

Feature Description
πŸ€– Multi-LLM Support Switch between OpenAI, Claude, or Ollama
🌍 Multilingual Automatic detection & responses in EN/ES/FR
πŸ› οΈ 30 MCP Tools Real-time flights, hotels, weather, events, finance
πŸ’¬ Context-Aware Remembers conversation history & user preferences
⚑ Smart Truncation Handles large API responses gracefully
πŸ”’ Private & Secure End-to-end encrypted via Hologram

✨ Features

πŸ›« Comprehensive Travel Planning

✈️ Flights

  • Real-time flight search via SerpAPI
  • Filter by price, airline, duration
  • Multi-city and round-trip support

🏨 Hotels

  • Global hotel search with ratings
  • Filter by amenities, price, class
  • Property details and reviews

🎭 Events

  • Local events and activities
  • Filter by date, type, venue
  • Concert, sports, cultural events

🌀️ Weather

  • Current conditions (OpenWeatherMap)
  • 5-day forecasts
  • Works worldwide

πŸ“ Geocoding

  • Location to coordinates
  • Distance calculations
  • Batch geocoding

πŸ’° Finance

  • Real-time currency conversion
  • Stock lookups
  • Market overview

πŸ€– Multi-LLM Support

Choose your preferred AI backend:

Provider Model Best For
OpenAI GPT-4o Production demos, best tool calling
Claude Claude Sonnet Alternative cloud option
Ollama Llama 3.1, Mistral Local/private, no API costs

🌍 Internationalization (i18n)

The bot automatically detects and responds in the user's language:

  • πŸ‡¬πŸ‡§ English - Default language
  • πŸ‡ͺπŸ‡Έ Spanish - "Hola, ΒΏquΓ© tiempo hace en Barcelona?"
  • πŸ‡«πŸ‡· French - "Bonjour, je cherche un hΓ΄tel Γ  Paris"

Language detection happens automatically based on the user's message patterns.

🧠 Smart Context Management

  • Conversation Memory - Remembers destinations, dates, preferences
  • No Repetitive Questions - Uses context from previous messages
  • Token Management - Automatic truncation of large responses
  • Rate Limit Handling - Graceful retry with context trimming

πŸš€ Quick Start

Prerequisites

Requirement Purpose Get It
Docker VS Agent container Install
Node.js 18+ Bot server Install
Python 3.12+ MCP servers Install
UV Python packages Install
ngrok Public URL tunnel Get free
Hologram App Mobile client Download

πŸ’‘ Windows Users: See WINDOWS_SETUP.md for Windows-specific setup instructions and PowerShell scripts.

API Keys Needed

Service Purpose Free Tier
OpenAI LLM orchestration Pay-as-you-go
SerpAPI Flights, hotels, events 100 searches/mo
OpenWeatherMap Weather data Unlimited

Installation

# 1. Clone the repository
git clone https://github.com/your-org/concieragent.git
cd concieragent

# 2. Install Node.js dependencies
pnpm install

# 3. Install Python dependencies for all MCP servers
for server in flight hotel event geocoder weather finance; do
  cd mcp_travelassistant/servers/${server}_server && uv sync && cd ../../..
done

# 4. Configure environment
cp .env.example .env
# Edit .env with your API keys

Running

You need 3 terminals:

On macOS/Linux:

# Terminal 1: Start ngrok
ngrok http 3001
# Note the URL: https://xxxxx.ngrok-free.app

# Terminal 2: Start bot server
pnpm start
# Wait for: βœ… Travel Agent ready!

# Terminal 3: Start VS Agent
./scripts/docker-run.sh xxxxx.ngrok-free.app

On Windows (PowerShell):

# Terminal 1: Start ngrok
ngrok http 3001
# Note the URL: https://xxxxx.ngrok-free.app

# Terminal 2: Start bot server
pnpm run dev
# Wait for: βœ… Travel Agent ready!

# Terminal 3: Start VS Agent (PowerShell)
.\scripts\docker-run.ps1 xxxxx.ngrok-free.app

# OR use Batch file (Command Prompt)
scripts\docker-run.bat xxxxx.ngrok-free.app

Connect & Test

  1. Open http://localhost:3001/invitation
  2. Scan QR code with Hologram app
  3. Send: "What's the weather in Tokyo?" πŸŽ‰

βš™οΈ Configuration

Environment Variables

Create a .env file in the project root:

# ═══════════════════════════════════════════════════════════════
# LLM PROVIDER CONFIGURATION
# ═══════════════════════════════════════════════════════════════

# Choose: 'openai', 'claude', or 'ollama'
LLM_PROVIDER=openai

# ───────────────────────────────────────────────────────────────
# OpenAI (default)
# ───────────────────────────────────────────────────────────────
OPENAI_API_KEY=sk-your-key-here
# OPENAI_MODEL=gpt-4o  # Optional, defaults to gpt-4o

# ───────────────────────────────────────────────────────────────
# Anthropic Claude
# ───────────────────────────────────────────────────────────────
ANTHROPIC_API_KEY=sk-ant-your-key-here
# CLAUDE_MODEL=claude-sonnet-4-20250514  # Optional

# ───────────────────────────────────────────────────────────────
# Ollama (Local - no API key needed)
# ───────────────────────────────────────────────────────────────
# OLLAMA_BASE_URL=http://localhost:11434  # Optional
# OLLAMA_MODEL=llama3.1  # Optional

# ═══════════════════════════════════════════════════════════════
# MCP SERVER API KEYS
# ═══════════════════════════════════════════════════════════════

# SerpAPI - Flights, Hotels, Events, Finance
SERPAPI_KEY=your-serpapi-key-here

# OpenWeatherMap - Weather data
OPENWEATHER_API_KEY=your-openweather-key-here

# ═══════════════════════════════════════════════════════════════
# VS AGENT
# ═══════════════════════════════════════════════════════════════
VS_AGENT_URL=http://localhost:3000

Switching LLM Providers

Simply change LLM_PROVIDER in your .env:

# Use Claude instead of OpenAI
LLM_PROVIDER=claude
ANTHROPIC_API_KEY=sk-ant-xxxxx

# Use local Ollama (free!)
LLM_PROVIDER=ollama
OLLAMA_MODEL=llama3.1

For Ollama, make sure it's running:

# Install from https://ollama.ai
ollama pull llama3.1
ollama serve

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    πŸ“± Hologram Mobile App                        β”‚
β”‚                    (iPhone / Android)                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚ πŸ” DIDComm (E2E Encrypted)
                            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  🐳 VS Agent (Docker)                            β”‚
β”‚            Protocol Handler β€’ Connection Manager                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚ HTTP Webhooks
                            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              πŸ€– Concieragent Bot Server (Node.js)               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                    TravelAgent                             β”‚  β”‚
β”‚  β”‚  β€’ Multi-LLM Provider (OpenAI/Claude/Ollama)              β”‚  β”‚
β”‚  β”‚  β€’ Context Management & Memory                             β”‚  β”‚
β”‚  β”‚  β€’ i18n Language Detection                                 β”‚  β”‚
β”‚  β”‚  β€’ Token Management & Truncation                           β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                            β”‚ MCP Protocol                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                    McpClient                               β”‚  β”‚
β”‚  β”‚           Spawns & manages Python MCP servers              β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚                     β”‚                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚ ✈️ Flights   β”‚  β”‚ 🏨 Hotels           β”‚  β”‚ 🎭 Events   β”‚
β”‚ (SerpAPI)   β”‚  β”‚ (SerpAPI)           β”‚  β”‚ (SerpAPI)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                     β”‚                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚ πŸ“ Geocoder  β”‚  β”‚ 🌀️ Weather          β”‚  β”‚ πŸ’° Finance  β”‚
β”‚ (Nominatim) β”‚  β”‚ (OpenWeatherMap)    β”‚  β”‚ (SerpAPI)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technology Stack

Layer Technology Purpose
Frontend Hologram App Encrypted mobile messaging
Protocol DIDComm Decentralized identity & encryption
Gateway VS Agent Protocol handler (Docker)
Server Node.js + TypeScript Application logic
AI OpenAI / Claude / Ollama LLM orchestration
Tools MCP Protocol External service integration
Servers Python 3.12 + FastMCP 6 specialized MCP servers

Kubernetes Deployment Architecture

While Kubernetes is not mandatory, here's an example architecture for production deployments:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Kubernetes Cluster                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚                    demos namespace                       β”‚    β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚    β”‚
β”‚  β”‚  β”‚ Concieragent│◀────────│  VS Agent   β”‚                β”‚    β”‚
β”‚  β”‚  β”‚   (Bot)     β”‚  HTTP   β”‚  (DIDComm)  β”‚                β”‚    β”‚
β”‚  β”‚  β”‚  Port 4001  β”‚         β”‚  Port 3000  β”‚                β”‚    β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚    β”‚
β”‚  β”‚        β”‚                        β”‚                        β”‚    β”‚
β”‚  β”‚        β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚    β”‚
β”‚  β”‚        β–Ό     β–Ό                                           β”‚    β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚    β”‚
β”‚  β”‚  β”‚              Ingress (nginx)                 β”‚        β”‚    β”‚
β”‚  β”‚  β”‚  concieragent.domain.com                    β”‚        β”‚    β”‚
β”‚  β”‚  β”‚  concieragent.domain.com/invitation         β”‚        β”‚    β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   Hologram   β”‚
                    β”‚   Mobile App β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

For Kubernetes deployment, use the provided Helm charts in the charts/ directory. See doc/deployment.md for detailed deployment instructions.


πŸ“‘ API Reference

Endpoints

Method Endpoint Description
POST /message-received Webhook for incoming messages
POST /connection-established Handle new connections with welcome
GET /welcome?lang=es Get localized welcome message
GET /health Health check
GET /invitation QR code for Hologram connection
GET /logo.png Bot logo

MCP Tools Available (30 total)

✈️ Flight Tools (4)
Tool Description
search_flights Search flights by origin, destination, dates
get_flight_details Get detailed info for a specific flight
filter_flights_by_price Filter results by max price
filter_flights_by_airline Filter results by airline
🏨 Hotel Tools (7)
Tool Description
search_hotels Search hotels by location, dates
get_hotel_details Get detailed hotel info
get_property_details Extended property information
filter_hotels_by_price Filter by price range
filter_hotels_by_rating Filter by star rating
filter_hotels_by_amenities Filter by amenities
filter_hotels_by_class Filter by hotel class
🎭 Event Tools (5)
Tool Description
search_events Search local events
get_event_details Get event details
filter_events_by_date Filter by date range
filter_events_by_type Filter by event type
filter_events_by_venue Filter by venue
🌀️ Weather Tools (3)
Tool Description
get_current_conditions Current weather for location
get_weather_forecast 5-day weather forecast
get_weather_data_details Extended weather data
πŸ“ Geocoder Tools (5)
Tool Description
geocode_location Address to coordinates
reverse_geocode Coordinates to address
batch_geocode Multiple locations at once
calculate_distance Distance between points
search_locations Search for places
πŸ’° Finance Tools (6)
Tool Description
convert_currency Real-time currency conversion
lookup_stock Stock price lookup
get_market_overview Market summary
get_finance_details Extended finance data
filter_stocks_by_price_movement Filter stocks
get_historical_data Historical prices

πŸ’¬ Usage Examples

English

User: "What's the weather like in Paris this week?"
Bot: 🌀️ Using OpenWeatherMap MCP tool...

     Current weather in Paris, France:
     Temperature: 18Β°C (feels like 17Β°C)
     Conditions: Partly cloudy
     Humidity: 65%
     Wind: 12 km/h

     5-Day Forecast:
     - Monday: 19Β°C, Sunny
     - Tuesday: 17Β°C, Light rain
     ...

Spanish πŸ‡ͺπŸ‡Έ

User: "Hola, busco vuelos de Madrid a Tokyo para la prΓ³xima semana"
Bot: Β‘Hola! Voy a buscar vuelos de Madrid a Tokyo...

     ✈️ He encontrado 5 opciones de vuelos:
     
     1. Iberia - $892 USD
        DuraciΓ³n: 14h 30m (1 escala)
        Salida: 10:30 β†’ Llegada: 07:00+1
     ...

French πŸ‡«πŸ‡·

User: "Bonjour, je cherche un hΓ΄tel Γ  Nice pour le week-end prochain"
Bot: Bonjour ! Je recherche des hΓ΄tels Γ  Nice...

     🏨 J'ai trouvé 8 hôtels correspondant à vos critères:
     
     1. Hôtel Negresco ⭐⭐⭐⭐⭐
        Prix: 320€/nuit
        Note: 4.8/5 (1,234 avis)
     ...

πŸ”§ Troubleshooting

Common Issues

❌ "No MCP tools available"

Cause: Python MCP servers failed to start

Fix:

# Check each server can start
cd mcp_travelassistant/servers/flight_server
uv sync
uv run python flight_server.py
# Should show "Processing request..." when working
❌ Rate limit exceeded (429)

Cause: Too many tokens or requests to OpenAI

Fix:

  • The bot automatically retries with trimmed context
  • Wait a few seconds between requests
  • Consider using Ollama for unlimited local usage
❌ VS Agent won't start

Fix:

# Check Docker is running
docker ps

# Remove old container and restart
docker stop vs-agent && docker rm vs-agent
./scripts/docker-run.sh your-ngrok-url
❌ Weather/flights returning errors

Cause: Missing or invalid API keys

Fix: Check your .env file has valid keys:

OPENWEATHER_API_KEY=your-key  # Get from openweathermap.org
SERPAPI_KEY=your-key          # Get from serpapi.com

πŸš€ Deployment Environments

Local Development

# 1. Install dependencies
pnpm install

# 2. Set up environment
cp .env.example .env
# Edit .env with your API keys

# 3. Install MCP server dependencies
for server in flight hotel event geocoder weather finance; do
  cd mcp_travelassistant/servers/${server}_server && uv sync && cd ../../..
done

# 4. Start ngrok (in separate terminal)
ngrok http 3001

# 5. Start bot server
pnpm run dev

# 6. Start VS Agent
./scripts/docker-run.sh your-ngrok-url

Docker Local Testing

# Build image
pnpm run docker:build

# Run with environment file
pnpm run docker:run

# Or with explicit env vars
docker run -p 4001:4001 \
  -e OPENAI_API_KEY=sk-xxx \
  -e SERPAPI_KEY=xxx \
  -e OPENWEATHER_API_KEY=xxx \
  concieragent:local

Kubernetes Deployment

For production deployments, use the provided Helm charts:

# Dry run
helm template concieragent ./charts \
  --set global.domain=your-domain.com

# Install
helm upgrade --install concieragent ./charts \
  --namespace demos \
  --create-namespace \
  --set global.domain=your-domain.com \
  --set existingSecret=concieragent-api-keys

See doc/deployment.md for detailed API documentation and deployment instructions.


🌐 Accessing Your Deployment

URLs

After successful deployment:

URL Purpose
https://concieragent.{domain}/invitation QR code for Hologram connection
https://concieragent.{domain}/health Health check endpoint
https://concieragent.{domain}/welcome Welcome message API

Connecting with Hologram

  1. Open your browser to https://concieragent.{domain}/invitation
  2. Open the Hologram app on your phone
  3. Scan the QR code
  4. Start chatting!

Checking Deployment Status

# View pods (Kubernetes)
kubectl get pods -n demos -l app=concieragent
kubectl get pods -n demos -l app=concieragent-vsa

# View logs
kubectl logs -n demos -l app=concieragent -f
kubectl logs -n demos -l app=concieragent-vsa -f

# View ingress
kubectl get ingress -n demos | grep concieragent

πŸ“ Project Structure

concieragent/
β”œβ”€β”€ πŸ“„ src/
β”‚   β”œβ”€β”€ bot.ts                    # Express server entry point
β”‚   β”œβ”€β”€ agent/
β”‚   β”‚   β”œβ”€β”€ TravelAgent.ts        # Main orchestration logic
β”‚   β”‚   └── McpClient.ts          # MCP protocol client
β”‚   β”œβ”€β”€ providers/
β”‚   β”‚   β”œβ”€β”€ types.ts              # Provider interfaces
β”‚   β”‚   β”œβ”€β”€ openai-provider.ts   # OpenAI adapter
β”‚   β”‚   β”œβ”€β”€ claude-provider.ts    # Claude adapter
β”‚   β”‚   β”œβ”€β”€ ollama-provider.ts    # Ollama adapter
β”‚   β”‚   └── index.ts              # Provider factory
β”‚   β”œβ”€β”€ controllers/              # Route handlers
β”‚   β”‚   β”œβ”€β”€ health.controller.ts  # Health check endpoint
β”‚   β”‚   β”œβ”€β”€ message.controller.ts # Message webhook handler
β”‚   β”‚   β”œβ”€β”€ connection.controller.ts # Connection webhook handler
β”‚   β”‚   └── index.ts              # Controller exports
β”‚   β”œβ”€β”€ config/                   # Configuration modules
β”‚   β”‚   β”œβ”€β”€ app.config.ts         # Application configuration
β”‚   β”‚   └── index.ts              # Config exports
β”‚   β”œβ”€β”€ dto/                      # Data Transfer Objects
β”‚   β”‚   └── index.ts              # DTO definitions
β”‚   β”œβ”€β”€ common/                   # Shared utilities
β”‚   β”‚   β”œβ”€β”€ enums/                # Enum definitions
β”‚   β”‚   └── index.ts              # Common exports
β”‚   └── i18n/                     # Internationalization
β”‚       β”œβ”€β”€ en/msg.json           # English messages
β”‚       β”œβ”€β”€ es/msg.json           # Spanish messages
β”‚       └── fr/msg.json           # French messages
β”œβ”€β”€ 🐍 mcp_travelassistant/
β”‚   └── servers/
β”‚       β”œβ”€β”€ flight_server/        # ✈️ Flight search
β”‚       β”œβ”€β”€ hotel_server/         # 🏨 Hotel search
β”‚       β”œβ”€β”€ event_server/         # 🎭 Event discovery
β”‚       β”œβ”€β”€ geocoder_server/      # πŸ“ Geocoding
β”‚       β”œβ”€β”€ weather_server/       # 🌀️ Weather
β”‚       └── finance_server/       # πŸ’° Finance
β”œβ”€β”€ πŸ“œ scripts/
β”‚   β”œβ”€β”€ docker-run.sh             # VS Agent startup
β”‚   └── entrypoint.sh             # Docker entrypoint script
β”œβ”€β”€ 🐳 docker-dev/                # Development Docker setup
β”‚   β”œβ”€β”€ docker-compose.yml        # Docker compose config
β”‚   β”œβ”€β”€ ngrok-config.yml          # Ngrok configuration
β”‚   └── README.md                 # Dev setup instructions
β”œβ”€β”€ πŸ“‹ package.json               # Dependencies
β”œβ”€β”€ βš™οΈ tsconfig.json              # TypeScript config
β”œβ”€β”€ βš™οΈ tsconfig.build.json        # Build-specific TypeScript config
β”œβ”€β”€ πŸ“ .eslintrc.js               # ESLint configuration
β”œβ”€β”€ πŸ“ .prettierrc                # Prettier configuration
β”œβ”€β”€ πŸ“ .npmrc                     # pnpm configuration
└── πŸ“– README.md                  # You are here!

πŸ›£οΈ Roadmap

  • Multi-LLM support (OpenAI, Claude, Ollama)
  • Internationalization (EN, ES, FR)
  • Conversation context memory
  • Smart token management
  • Live deployment (24/7 availability)
  • CI/CD pipeline
  • Credential/passport verification
  • More languages (DE, IT, PT, JA, ZH)
  • Car rental MCP server
  • Restaurant reservations

🀝 Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

πŸ“„ License

MIT License - see LICENSE for details.


πŸ™ Acknowledgments


Built with ❀️ for the Hologram ecosystem by Maxime Mansiet

⬆️ Back to Top

About

Multilingual AI Travel Concierge for Hologram

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •