npm package: @striderlabs/mcp-avis
Description: Model Context Protocol connector for Avis car rental
Latest version: 1.0.0

# @striderlabs/mcp-avis

Model Context Protocol (MCP) connector for [Avis Car Rental](https://www.avis.com).
Enables AI assistants to search vehicles, get quotes, book reservations, and manage existing bookings via Playwright browser automation.

## Tools

| Tool | Description |
|------|-------------|
| `search_vehicles` | Search available cars by location, dates, and car type |
| `get_quote` | Get detailed pricing (base rate, taxes, fees, total) for a specific vehicle |
| `make_reservation` | Book a car rental reservation |
| `view_reservations` | List reservations for an Avis Preferred account |
| `cancel_reservation` | Cancel a booking by confirmation number + last name |
| `get_locations` | Find Avis locations near a city, airport, or coordinates |

## Installation

```bash
npm install @striderlabs/mcp-avis
npx playwright install chromium
```

## Configuration

Optionally set environment variables for Avis Preferred authentication:

```bash
AVIS_PREFERRED_ID=your_member_number_or_email
AVIS_PASSWORD=your_password
AVIS_AWD_NUMBER=your_corporate_awd_code   # optional
```

## Usage with Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "avis": {
      "command": "node",
      "args": ["/path/to/node_modules/@striderlabs/mcp-avis/dist/index.js"],
      "env": {
        "AVIS_PREFERRED_ID": "your_member_number",
        "AVIS_PASSWORD": "your_password"
      }
    }
  }
}
```

## Usage with `mcp` CLI

```bash
mcp run node dist/index.js
```

## Example Tool Calls

### Search for cars

```json
{
  "tool": "search_vehicles",
  "arguments": {
    "pickup_location": "LAX",
    "pickup_date": "2025-07-10",
    "pickup_time": "10:00",
    "dropoff_date": "2025-07-15",
    "dropoff_time": "10:00",
    "car_type": "SUV"
  }
}
```

### Get a quote

```json
{
  "tool": "get_quote",
  "arguments": {
    "vehicle_id": "VEH-XXXXX",
    "pickup_location_id": "LAX",
    "pickup_datetime": "2025-07-10T10:00:00",
    "dropoff_datetime": "2025-07-15T10:00:00"
  }
}
```

### Book a reservation

```json
{
  "tool": "make_reservation",
  "arguments": {
    "vehicle_id": "VEH-XXXXX",
    "pickup_location_id": "LAX",
    "pickup_datetime": "2025-07-10T10:00:00",
    "dropoff_datetime": "2025-07-15T10:00:00",
    "driver_first_name": "Jane",
    "driver_last_name": "Smith",
    "driver_email": "jane@example.com",
    "driver_phone": "555-123-4567",
    "preferred_number": "A1234567"
  }
}
```

### Cancel a reservation

```json
{
  "tool": "cancel_reservation",
  "arguments": {
    "confirmation_number": "AVIS-ABC123",
    "last_name": "Smith"
  }
}
```

### Find Avis locations

```json
{
  "tool": "get_locations",
  "arguments": {
    "query": "SFO",
    "type": "airport"
  }
}
```

## Notes

- Playwright drives a headless Chromium browser with anti-bot detection measures (no `navigator.webdriver`, realistic user-agent).
- All tools gracefully fall back to representative mock data if live scraping fails, so the connector remains functional in CI or restricted environments.
- Making actual reservations sends real bookings to Avis — always verify before confirming.
- Avis Preferred AWD codes can be passed per-search or set via `AVIS_AWD_NUMBER`.

## Development

```bash
npm install
npx playwright install chromium
npm run dev        # run with ts-node
npm run build      # compile TypeScript
npm run start      # run compiled output
```

## License

MIT