Skip to main content
Glama
AMC MCP Server
by ho-ju

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

Related MCP server: AMC MCP Server

Quick Start šŸš€

Prerequisites

  • Python 3.8+

  • Docker (optional, for containerized deployment)

Installation

Option 1: Local Installation

  1. Clone the repository:

git clone <repository-url>
cd amc-mcp
  1. Install dependencies:

pip install -r requirements.txt
  1. Install the package:

pip install -e .
  1. Run the server:

python -m amc_mcp.fastmcp_server

Option 2: Docker Deployment

  1. Build and run with Docker Compose:

docker-compose up --build
  1. Or build and run manually:

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:

{
  "location": "Boston, MA"
}

Output:

{
  "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:

{
  "genre": "action",
  "mood": "exciting"
}

Output:

{
  "criteria": {"genre": "action", "mood": "exciting"},
  "recommendations": [...]
}

3. get_showtimes

Fetches available showtimes for a specific movie and location.

Input:

{
  "movie_id": "mv001",
  "date": "2025-10-28",
  "location": "Boston, MA"
}

Output:

{
  "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:

{
  "showtime_id": "st001"
}

Output:

{
  "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:

{
  "showtime_id": "st001",
  "seats": ["A5", "A6"],
  "user_id": "user123"
}

Output:

{
  "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:

{
  "booking_id": "booking-uuid",
  "payment_method": "card",
  "amount": 37.00
}

Output:

{
  "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

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

Theater

{
  "theater_id": str,
  "name": str,
  "address": str,
  "city": str,
  "state": str,
  "zip_code": str
}

Showtime

{
  "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:

{
  "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:

{
  "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! šŸæšŸŽ¬

Available Tools

6 tools
book_seatsC

Reserves selected seats for the user.

Inputs: seats (required), user_id (required), showtime_id (required). Returns: result

get_now_showingA

Returns a list of movies currently showing in a given city or ZIP code.

Inputs: location (required). Returns: result

get_recommendationsA

Suggests movies based on mood, genre, or time preferences.

Inputs: mood, genre, time_preference. Returns: result

get_seat_mapA

Displays available and reserved seats for a specific showtime.

Inputs: showtime_id (required). Returns: result

get_showtimesB

Fetches available showtimes for a specific movie and location.

Inputs: date (required), location (required), movie_id (required). Returns: result

process_paymentC

Handles simulated payment transaction.

Inputs: amount (required), booking_id (required), payment_method (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 6 tools

    Disambiguation4/5

    Each tool targets a distinct step in the movie-booking flow: recommendations, showtimes, seat maps, booking, payment, and now-showing lists. The only slight overlap is between get_recommendations and get_now_showing, but their purposes (personalized suggestions vs. current listings) are clear enough.

    Naming Consistency4/5

    All tools use a consistent verb_noun pattern (get_, book_, process_), which is predictable. Minor deviation: 'process_payment' uses a generic verb compared to the more specific 'get_' and 'book_' verbs, but it still fits the pattern.

    Tool Count5/5

    Six tools is well-scoped for a movie booking domain, covering the essential user journey from discovery to payment without unnecessary bloat. Each tool serves a clear purpose in the workflow.

    Completeness4/5

    The surface covers the core booking lifecycle: discover movies, check showtimes, view seats, book, and pay. A minor gap is the lack of a cancellation or refund tool, but the simulated payment and booking flow is otherwise complete.

    Related MCP Connectors

    Related MCP Servers