Skip to main content
Glama
snehalsaurabh

Food Travel MCP Server

README.md
# Food Travel MCP Server

A **Model Context Protocol (MCP) server** that provides restaurant search and food recommendation tools for AI clients. This server integrates with Google Places API to deliver real-time restaurant data to AI applications.

## ๐ŸŽฏ What is MCP?

**Model Context Protocol (MCP)** enables AI applications to access external tools and data sources through a standardized interface.

- **MCP Server** (this project): Exposes food-related tools to AI clients
- **MCP Client** (Claude Desktop, custom AI agents): Calls our tools based on user prompts

### How it Works
```
User: "Find Italian restaurants near me"
    โ†“
AI Client (Claude/Custom Agent)
    โ†“ (analyzes prompt, decides to call search_restaurants tool)
Our MCP Server
    โ†“ (calls Google Places API)
Real Restaurant Data
    โ†“ (returns structured JSON to AI client)
AI Client formats response for user
```

## ๐Ÿš€ Features

- **Real-time restaurant search** using Google Places API
- **Location-based filtering** with customizable radius
- **Cuisine-type filtering** (Italian, Chinese, etc.)
- **Flexible parameters** (max results, price level)
- **Database caching** for improved performance
- **Comprehensive testing suite**
- **Production-ready architecture**

## ๐Ÿ“‹ Prerequisites

- Python 3.8 or higher
- Google Places API key ([Get one here](https://developers.google.com/maps/documentation/places/web-service/get-api-key))
- Git

## ๐Ÿ› ๏ธ Installation

### Step 1: Clone the Repository
```bash
git clone <your-repo-url>
cd Food-Travel-MCP
```

### Step 2: Create Virtual Environment
```bash
# Create virtual environment
python -m venv venv

# Activate it
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
```

### Step 3: Install Dependencies
```bash
pip install -r requirements.txt
```

### Step 4: Environment Configuration
```bash
# Copy environment template
cp .env.example .env

# Edit .env file and add your Google Places API key
# Replace "your_google_places_api_key_here" with your actual API key
```

**Required environment variables in `.env`:**
```env
GOOGLE_PLACES_API_KEY=your_actual_api_key_here
DATABASE_URL=sqlite:///./food_travel.db
DEBUG=false
```

### Step 5: Initialize Database
```bash
python scripts/init_db.py
```

You should see:
```
Creating database tables...
Database tables created successfully!
```


## ๐Ÿงช Testing

### Quick Test (Recommended)
```bash
# Run all tests in sequence
python tests/run_all_tests.py
```

### Individual Test Components
```bash
# Test Google Places API integration
python tests/test_components.py

# Test MCP tools functionality  
python tests/test_mcp_tools.py
```

### Using Pytest (Advanced)
```bash
# Install pytest if not already included
pip install pytest pytest-asyncio

# Run all tests
pytest tests/ -v

# Run with output
pytest tests/ -v -s
```

### Expected Test Output
โœ… **Component Tests**: Verify Google Places API connectivity and data formatting  
โœ… **MCP Tools Tests**: Verify tools accept parameters and return proper JSON responses  
โœ… **Integration Tests**: End-to-end functionality verification

## ๐ŸŽฎ Running the Server

### Start the MCP Server
```bash
python -m src.food_mcp.server
```

**Expected output:**
```
INFO Food Travel MCP Server initialized
INFO Restaurant tools registered
INFO Starting Food Travel MCP Server
[Server running and waiting for MCP client connections...]
```


### Server Endpoints

The server exposes the following MCP tools:

#### `search_restaurants`
Search for restaurants based on location and preferences.

**Parameters:**
- `location` (required): "New York, NY" or "40.7128,-74.0060"
- `cuisine_type` (optional): "Italian", "Chinese", "Pizza", etc.
- `radius_km` (optional): Search radius in kilometers (default: 10)
- `max_results` (optional): Maximum results to return (default: 10)

**Example Response:**
```json
{
  "success": true,
  "location": "New York, NY",
  "total_results": 5,
  "restaurants": [
    {
      "google_place_id": "ChIJ...",
      "name": "Tony's Italian Restaurant",
      "address": "123 Main St, New York, NY",
      "latitude": 40.7128,
      "longitude": -74.0060,
      "rating": 4.5,
      "user_ratings_total": 127,
      "price_level": 2,
      "types": ["restaurant", "food"]
    }
  ]
}
```

## ๐Ÿ“ Project Structure

```
Food-Travel-MCP/
โ”œโ”€โ”€ ๐Ÿ“„ README.md                 # This file
โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt          # Python dependencies
โ”œโ”€โ”€ ๐Ÿ“„ .env.example             # Environment template
โ”œโ”€โ”€ ๐Ÿ“„ .gitignore               # Git ignore rules
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ config/                  # Configuration
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ settings.py             # Application settings
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ src/food_mcp/           # Main MCP server package
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ server.py              # MCP server entry point
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ models/             # Database models
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ base.py            # Database base & session
โ”‚   โ”‚   โ””โ”€โ”€ restaurant.py      # Restaurant cache model
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ clients/            # External API clients
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ””โ”€โ”€ google_places.py   # Google Places API client
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ services/           # Business logic layer
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ””โ”€โ”€ restaurant_service.py
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ ๐Ÿ“ tools/              # MCP tool definitions
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ””โ”€โ”€ restaurant_tools.py # Restaurant search tools
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ tests/                  # Test suite
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ conftest.py            # Pytest configuration
โ”‚   โ”œโ”€โ”€ test_components.py     # Component tests
โ”‚   โ”œโ”€โ”€ test_mcp_tools.py      # MCP tools tests
โ”‚   โ””โ”€โ”€ run_all_tests.py       # Test runner
โ”‚
โ””โ”€โ”€ ๐Ÿ“ scripts/                # Utility scripts
    โ””โ”€โ”€ init_db.py             # Database initialization
```


## ๐Ÿ”ง Development Workflow

### 1. Development Setup
```bash
# Make sure virtual environment is activated
source venv/bin/activate  # or venv\Scripts\activate on Windows

# Install development dependencies
pip install -r requirements.txt

# Set up pre-commit hooks (optional)
pip install pre-commit
pre-commit install
```

### 2. Making Changes
```bash
# Run tests before making changes
python tests/run_all_tests.py

# Make your changes...

# Run tests again to ensure nothing broke
python tests/run_all_tests.py

# Test server startup
python -m src.food_mcp.server
```

### 3. Adding New Tools
1. Create tool function in `src/food_mcp/tools/`
2. Register tool in `__init__.py`
3. Add corresponding service logic in `src/food_mcp/services/`
4. Write tests in `tests/`
5. Update documentation

## ๐ŸŒŸ Usage Examples

### With Claude Desktop
1. Install Claude Desktop
2. Configure MCP server in Claude's settings
3. Ask: "Find Italian restaurants near Times Square"

### With Custom MCP Client
```python
# Example client code
import asyncio
from mcp_client import MCPClient

async def find_restaurants():
    client = MCPClient("food-travel-mcp")
    
    result = await client.call_tool(
        "search_restaurants",
        location="San Francisco, CA",
        cuisine_type="Italian",
        max_results=5
    )
    
    print(result)
```

## ๐Ÿšง Current Phase: Phase 1 - Basic Restaurant Search

### โœ… Completed
- [x] Production-ready project structure
- [x] Google Places API integration
- [x] Basic restaurant search tool
- [x] Database models and caching structure
- [x] Comprehensive testing suite
- [x] Error handling and validation

### ๐Ÿ”„ In Progress
- [ ] Database caching implementation
- [ ] Performance optimization
- [ ] Additional restaurant tools (menu, reviews)

### ๐Ÿ“… Future Phases
- **Phase 2**: User personalization integration with existing backend
- **Phase 3**: Menu data and ordering capabilities
- **Phase 4**: Enhanced AI features and trend analysis
- **Phase 5**: Production deployment and monitoring

## ๐Ÿ› Troubleshooting

### Common Issues

**Import Error: `ModuleNotFoundError: No module named 'src'`**
```bash
# Make sure you're running from project root
cd Food-Travel-MCP
python scripts/init_db.py
```

**Google Places API Error**
```bash
# Check your API key in .env file
cat .env | grep GOOGLE_PLACES_API_KEY

# Verify API key has Places API enabled in Google Console
```

**Database Issues**
```bash
# Reinitialize database
rm food_travel.db  # if using SQLite
python scripts/init_db.py
```

**Test Failures**
```bash
# Check API key configuration
python -c "from dotenv import load_dotenv; import os; load_dotenv(); print('API Key configured:', bool(os.getenv('GOOGLE_PLACES_API_KEY')))"

# Run individual test components
python tests/test_components.py
```

## ๐Ÿ“ž Support

For issues and questions:
1. Check the troubleshooting section above
2. Review test output for specific errors
3. Ensure all prerequisites are met
4. Verify Google Places API key is valid and has proper permissions

## ๐ŸŽ‰ Quick Start Summary

```bash
# 1. Setup
git clone <repo> && cd Food-Travel-MCP
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# 2. Configure
cp .env.example .env
# Edit .env with your Google Places API key

# 3. Initialize
python scripts/init_db.py

# 4. Test
python tests/run_all_tests.py

# 5. Run
python -m src.food_mcp.server
```

**๐ŸŽฏ You're ready to integrate with AI clients and start finding restaurants!**