Skip to main content
Glama
hi5d
by hi5d
README.md
# AMC MCP Server šŸŽ¬

An Model Context Protocol (MCP) server that provides a comprehensive movie booking experience for AMC Theatres. This server enables conversational AI assistants to help users discover movies, find showtimes, book seats, and process payments through a simple API interface.

## Features ✨

- **Movie Discovery**: Browse currently showing movies and get personalized recommendations
- **Showtime Lookup**: Find available showtimes by location, date, and movie
- **Seat Selection**: View interactive seat maps and check availability
- **Booking Management**: Reserve seats with real-time availability checking
- **Payment Processing**: Handle mock payment transactions with confirmation receipts
- **Multi-location Support**: Search across multiple AMC theater locations

## Quick Start šŸš€

### Prerequisites

- Python 3.8+
- Docker (optional, for containerized deployment)

### Installation

#### Option 1: Local Installation

1. Clone the repository:
```bash
git clone <repository-url>
cd amc-mcp
```

2. Install dependencies:
```bash
pip install -r requirements.txt
```

3. Install the package:
```bash
pip install -e .
```

4. Run the server:
```bash
python -m amc_mcp.fastmcp_server
```

#### Option 2: Docker Deployment

1. Build and run with Docker Compose:
```bash
docker-compose up --build
```

2. Or build and run manually:
```bash
docker build -t amc-mcp .
docker run -it amc-mcp
```

## MCP Tools Reference šŸ› ļø

### 1. get_now_showing
Returns a list of movies currently showing in a given location.

**Input:**
```json
{
  "location": "Boston, MA"
}
```

**Output:**
```json
{
  "location": "Boston, MA",
  "movies": [
    {
      "movie_id": "mv001",
      "title": "Dune: Part Two",
      "rating": "PG-13",
      "duration": 166,
      "genre": "Sci-Fi/Action",
      "description": "Paul Atreides unites with Chani..."
    }
  ]
}
```

### 2. get_recommendations
Suggests movies based on mood, genre, or preferences.

**Input:**
```json
{
  "genre": "action",
  "mood": "exciting"
}
```

**Output:**
```json
{
  "criteria": {"genre": "action", "mood": "exciting"},
  "recommendations": [...]
}
```

### 3. get_showtimes
Fetches available showtimes for a specific movie and location.

**Input:**
```json
{
  "movie_id": "mv001",
  "date": "2025-10-28",
  "location": "Boston, MA"
}
```

**Output:**
```json
{
  "movie": {"id": "mv001", "title": "Dune: Part Two"},
  "date": "2025-10-28",
  "location": "Boston, MA",
  "showtimes": [
    {
      "showtime_id": "st001",
      "theater_name": "AMC Boston Common 19",
      "theater_address": "175 Tremont Street",
      "time": "14:00",
      "format": "IMAX",
      "price": 18.50
    }
  ]
}
```

### 4. get_seat_map
Displays available and reserved seats for a specific showtime.

**Input:**
```json
{
  "showtime_id": "st001"
}
```

**Output:**
```json
{
  "showtime_id": "st001",
  "movie": "Dune: Part Two",
  "theater": "AMC Boston Common 19",
  "date": "2025-10-28",
  "time": "14:00",
  "seat_map": [
    {
      "seat_number": "A5",
      "row": "A",
      "column": 5,
      "is_available": true,
      "price_tier": "Standard",
      "price": 18.50
    }
  ]
}
```

### 5. book_seats
Reserves selected seats for the user.

**Input:**
```json
{
  "showtime_id": "st001",
  "seats": ["A5", "A6"],
  "user_id": "user123"
}
```

**Output:**
```json
{
  "booking_id": "booking-uuid",
  "status": "pending",
  "movie": "Dune: Part Two",
  "theater": "AMC Boston Common 19",
  "date": "2025-10-28",
  "time": "14:00",
  "seats": ["A5", "A6"],
  "total_price": 37.00
}
```

### 6. process_payment
Handles simulated payment transaction.

**Input:**
```json
{
  "booking_id": "booking-uuid",
  "payment_method": "card",
  "amount": 37.00
}
```

**Output:**
```json
{
  "payment_id": "payment-uuid",
  "payment_status": "success",
  "booking_id": "booking-uuid",
  "receipt_url": "https://amc.com/receipts/payment-uuid",
  "confirmation": {
    "movie": "Dune: Part Two",
    "theater": "AMC Boston Common 19",
    "date": "2025-10-28",
    "time": "14:00",
    "seats": ["A5", "A6"],
    "total_paid": 37.00
  }
}
```

## Example Conversation Flow šŸ’¬

Here's how a typical movie booking conversation would work:

1. **User**: "Find an action movie near me tonight."
   - Server calls: `get_now_showing` + `get_recommendations`
   - Returns: List of action movies with showtimes

2. **User**: "Book two seats for Dune: Part Two at 8 PM."
   - Server calls: `get_showtimes` → `get_seat_map` → `book_seats`
   - Returns: Seat selection and booking confirmation

3. **User**: "Pay with my card."
   - Server calls: `process_payment`
   - Returns: Payment confirmation with digital receipt

## Architecture šŸ—ļø

```
amc-mcp/
ā”œā”€ā”€ src/
│   └── amc_mcp/
│       ā”œā”€ā”€ __init__.py
│       └── server.py          # Main MCP server implementation
ā”œā”€ā”€ data/
│   ā”œā”€ā”€ movies.json           # Movie catalog
│   ā”œā”€ā”€ theaters.json         # Theater locations
│   ā”œā”€ā”€ showtimes.json        # Showtime schedules
│   └── seats.json           # Seat maps by showtime
ā”œā”€ā”€ config/
│   └── nginx.conf           # Web server configuration
ā”œā”€ā”€ Dockerfile               # Container configuration
ā”œā”€ā”€ docker-compose.yml       # Multi-service orchestration
ā”œā”€ā”€ requirements.txt         # Python dependencies
ā”œā”€ā”€ pyproject.toml          # Package configuration
└── README.md               # This file
```

## Data Models šŸ“Š

### Movie
```python
{
  "movie_id": str,
  "title": str,
  "rating": str,         # PG, PG-13, R, etc.
  "duration": int,       # Minutes
  "genre": str,
  "description": str,
  "poster_url": str
}
```

### Theater
```python
{
  "theater_id": str,
  "name": str,
  "address": str,
  "city": str,
  "state": str,
  "zip_code": str
}
```

### Showtime
```python
{
  "showtime_id": str,
  "movie_id": str,
  "theater_id": str,
  "date": str,           # YYYY-MM-DD
  "time": str,           # HH:MM
  "format": str,         # Standard, IMAX, 3D, Dolby
  "price": float
}
```

## Development šŸ‘Øā€šŸ’»

### Adding New Movies
Edit `data/movies.json` to add new movies:

```json
{
  "movie_id": "mv011",
  "title": "New Movie Title",
  "rating": "PG-13",
  "duration": 120,
  "genre": "Action",
  "description": "Description of the movie...",
  "poster_url": "https://example.com/poster.jpg"
}
```

### Adding New Theaters
Edit `data/theaters.json`:

```json
{
  "theater_id": "th011",
  "name": "AMC New Location 15",
  "address": "123 Main Street",
  "city": "New City",
  "state": "NY",
  "zip_code": "12345"
}
```

### Adding Showtimes
Edit `data/showtimes.json` and `data/seats.json` to add new showtimes and corresponding seat maps.

### Testing

#### Manual Testing
You can test individual tools using the MCP inspector or by connecting to any MCP-compatible client.

#### Testing with Claude Desktop
1. Configure Claude Desktop to connect to your MCP server
2. Use natural language to test the booking flow
3. Example: "Find me a sci-fi movie showing tonight in Boston"

## Configuration āš™ļø

### Environment Variables

- `PYTHONPATH`: Set to `/app/src` for proper module resolution
- `PYTHONUNBUFFERED`: Set to `1` for real-time logging
- `MCP_LOG_LEVEL`: Set logging level (DEBUG, INFO, WARNING, ERROR)

### Docker Configuration

The server runs in a lightweight Python 3.11 container with:
- Non-root user for security
- Health checks for monitoring
- Volume mounts for data persistence
- Network isolation

## Security Considerations šŸ”’

This is a **mock implementation** for demonstration purposes. In production:

1. **Payment Processing**: Integrate with real payment gateways (Stripe, PayPal)
2. **Authentication**: Add user authentication and authorization
3. **Data Validation**: Implement comprehensive input validation
4. **Rate Limiting**: Add API rate limiting
5. **Encryption**: Use HTTPS and encrypt sensitive data
6. **Database**: Replace JSON files with a real database
7. **Logging**: Implement structured logging and monitoring

## Future Enhancements šŸ”®

- **Real AMC API Integration**: Connect to actual AMC Theatres API
- **User Accounts**: Persistent user profiles and booking history  
- **Group Bookings**: Support for multiple users booking together
- **Loyalty Programs**: AMC Stubs integration
- **Mobile Tickets**: Generate QR codes for mobile entry
- **Seat Recommendations**: AI-powered optimal seat suggestions
- **Price Alerts**: Notify users of discounts and promotions
- **Social Features**: Share movie plans with friends
- **Accessibility**: ADA-compliant seat selection
- **Multi-language**: International language support

## Contributing šŸ¤

1. Fork the repository
2. Create a feature branch: `git checkout -b feature/new-feature`
3. Make your changes and add tests
4. Commit your changes: `git commit -am 'Add new feature'`
5. Push to the branch: `git push origin feature/new-feature`
6. Submit a pull request

## License šŸ“„

This project is licensed under the MIT License - see the LICENSE file for details.

## Support šŸ’¬

For questions, issues, or feature requests:
- Create an issue in the GitHub repository
- Check the documentation for common solutions
- Review the example conversation flows

---

**Happy movie booking! šŸæšŸŽ¬**

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose within the movie theater booking domain. book_seats handles seat reservations, get_now_showing lists current movies, get_recommendations suggests films, get_seat_map shows seat availability, get_showtimes fetches screening times, and process_payment handles transactions. There is no overlap or ambiguity between these functions.

Naming Consistency5/5

All six tools follow a consistent verb_noun naming pattern with snake_case. The verbs are appropriate and descriptive: 'book', 'get' (used four times consistently), and 'process'. This uniformity makes the tool set predictable and easy to understand.

Tool Count5/5

With 6 tools, this server is well-scoped for its movie theater booking purpose. It covers the essential workflow from discovery (get_now_showing, get_recommendations) to booking (get_showtimes, get_seat_map, book_seats) to payment (process_payment). Each tool earns its place without being excessive or insufficient.

Completeness4/5

The tool set covers the core movie booking workflow comprehensively, from discovery to payment. However, there are minor gaps: no tools for canceling bookings, updating reservations, or managing user profiles. These are not critical failures but represent areas where agents might need workarounds.

Maintenance

ActivityInactive
ResponsivenessNo issues