# SpotHero Parking MCP

> SpotHero Parking connects your AI agent to a massive North American parking marketplace. Search for available spots across 400+ cities by coordinates and time range. You can compare real-time rates using `get_pricing`, book reservations instantly with `book_parking`, or manage existing bookings via `cancel_reservation`—all through natural conversation.

## Overview
- **Category:** productivity
- **Price:** Free
- **Tags:** parking-reservations, urban-mobility, dynamic-pricing, location-services, booking-api

## Description

SpotHero connects your AI agent to a massive North American parking marketplace. You can find spots across 400+ cities, check rates, and manage bookings—all through natural chat. When you need to plan where you're gonna park, you use **`search_parking`**; just feed it the coordinates and the time range in ISO 8601 format, and it finds open spots near you. If you want more neighborhood context before committing, run **`search_events`** to see what major local happenings might be spiking demand or messing with nearby pricing rates.

Before you lock down a spot, you gotta know the price. You calculate dynamic parking rates for any defined time duration using **`get_pricing`**. This tool lets you compare costs across multiple options without actually booking anything. If you're looking at one specific location, **`get_spot_details`** gives you deep info and current pricing data right there. For a full rundown of a garage—like the hours, amenities, or who to call—you hit up **`get_garage_details`**. 

Ready to book? You create a final reservation using **`book_parking`**, but you've gotta supply the required spot ID, the times, your payment details, and all the vehicle info. Once that's done, you can manage what you booked. To see everything you’re paying for or tracking, run **`list_reservations`** to get a list of all your bookings; it lets you filter by status—upcoming or past.

If you need the deep dive on one specific booking, use **`get_reservation`**. This pulls every detail and cost breakdown associated with an existing reservation ID. If your car changes—maybe you swapped out the plates or model—you modify that data using **`update_vehicle_info`** attached to a current spot. And if your plans change fast, you cancel it clean with **`cancel_reservation`**, which also checks the policy for any possible refund.

This suite of tools lets you find spots, check costs, and handle every step—from searching coordinates to modifying vehicle details—without leaving your AI agent.

## Tools

### book_parking
Creates and confirms a new parking reservation using required spot ID, times, payment info, and vehicle details.

### cancel_reservation
Cancels an active parking booking and checks the policy to determine if a refund is possible.

### get_spot_details
Provides comprehensive information and current pricing data for a single identified parking spot.

### search_events
Finds local events that might impact expected parking demand or change nearby pricing rates.

### get_garage_details
Retrieves specific operational data, amenities, hours, and contact information for a single garage location.

### get_reservation
Fetches all specific details, including location and cost breakdown, for an existing reservation ID.

### list_reservations
Retrieves a list of all parking reservations associated with the account, optionally filtered by status (upcoming, past).

### get_pricing
Calculates dynamic parking rates by comparing costs for a spot over a defined duration before booking.

### search_parking
Locates available parking spots near a specified geographic coordinate for a given time window in ISO 8601 format.

### update_vehicle_info
Modifies the vehicle's make, model, or license plate number attached to an existing reservation.

## Prompt Examples

**Prompt:** 
```
Find parking near Times Square for 2 hours starting now.
```

**Response:** 
```
Found 5 spots within 0.5 miles. Cheapest: Icon Parking at $15/hr. Most convenient: Edison ParkFast (2 min walk) at $22 total.
```

**Prompt:** 
```
Book spot 12345 from 9 AM to 5 PM tomorrow.
```

**Response:** 
```
Reservation created! ID: SH-998877. Total cost: $24. QR Code sent to your email. Vehicle: Black Honda Civic (ABC-1234).
```

**Prompt:** 
```
What events are happening downtown tonight?
```

**Response:** 
```
Found 3 events: 1) Concert at City Hall (7 PM). 2) Sports Game at Arena (8 PM). Parking rates nearby are +20% due to high demand.
```

## Capabilities

### Find Available Parking
Search for open parking spots by providing a location and time range using `search_parking`.

### Calculate Spot Rates
Get dynamic, real-time pricing comparisons for specific durations via the `get_pricing` tool.

### Book and Confirm Parking
Create a finalized reservation using `book_parking`, which requires vehicle details and payment information.

### Manage Existing Reservations
View, update vehicle info for, or cancel current bookings using `get_reservation`, `list_reservations`, or `cancel_reservation`.

### Gather Location Details
Retrieve specific data—like amenities, hours, and contact details—for a known garage via `get_garage_details`.

## Use Cases

### Planning a conference with limited time
The event organizer needs parking for 50 people near the convention center. Instead of calling five different parking lots, they ask their agent to run `search_parking` for the full date range. The agent returns spots filtered by availability and then uses `get_pricing` to calculate a bulk estimate, allowing the coordinator to book everything via `book_parking` in one go.

### A delivery driver's last-minute change
The fleet manager realizes the company swapped out the usual black Honda Civic for an SUV. Instead of calling customer service, they simply instruct their agent to run `update_vehicle_info` on the existing reservation ID. The reservation is updated instantly with zero downtime.

### Checking if a spot is still worth it
A user found an old booking confirmation but wants to check the current rate before leaving home. They run `get_spot_details` and compare the returned pricing data against the original cost listed on their reservation, making sure they aren't overpaying.

### Handling unexpected city events
A team is meeting downtown but needs to know if a festival changes parking rates. They first run `search_events` and see that a major market is happening nearby, which means the agent must factor in a 30% rate increase when running subsequent `get_pricing` calls.

## Benefits

- Stop guessing on cost. Before booking, run `get_pricing` to compare dynamic rates for a spot over several hours so you know the total expected expense.
- Don't waste time cross-referencing maps and websites. Use `search_parking` with coordinates and a time range to get immediate options and availability data.
- Need to change your car? Instead of calling support, call the `update_vehicle_info` tool to swap out the plate or model on an existing reservation instantly.
- Pre-planning for big events is easy. Run `search_events` first; it tells you if a concert or game nearby will spike parking rates by 20% or more.
- Full lifecycle management happens in one flow. Use `list_reservations` to see everything, then use `get_reservation` to get the specific details needed for checkout.
- Access local knowledge instantly. Use `get_garage_details` to check if a spot has an elevator or if it's open on holidays before you try to book.

## How It Works

The bottom line is that your AI agent handles all the required context switching and API calls needed to complete a complex booking workflow.

1. Subscribe to the server on Vinkius and supply your SpotHero Partner API Key and Base URL credentials.
2. Your AI client invokes a tool, like `search_parking`, specifying parameters (e.g., location coordinates and ISO 8601 time range).
3. The server executes the request against the SpotHero API and returns structured data—be it available spot IDs, calculated pricing, or reservation confirmations.

## Frequently Asked Questions

**How do I find available parking spots using search_parking?**
You must provide coordinates and a time range in ISO 8601 format. The tool returns IDs of available spots, which you can then use with `get_spot_details` for more info.

**Can I check the final cost before calling book_parking?**
Absolutely. Use `get_pricing`. This function compares dynamic rates for a specific duration, ensuring you know the total price before committing to a reservation via `book_parking`.

**What is the difference between get_spot_details and get_garage_details?**
`get_spot_details` gives information about one specific, booked spot. `get_garage_details` provides broader operational data for the entire physical garage facility.

**If I change my car, do I need to cancel and rebook?**
No. Use the `update_vehicle_info` tool. It modifies your existing reservation details directly without requiring a cancellation or new booking process.

**When using `search_parking`, what time format do I need for the start and end times?**
The API requires ISO 8601 format for all date/time inputs. Make sure your agent passes timestamps like YYYY-MM-DDTHH:MM:SSZ to prevent search failures.

**If I call `book_parking` and the spot suddenly becomes unavailable, what should I expect?**
The server returns a specific 'NOT_AVAILABLE' status code. Your agent needs to catch this failure and prompt the user to try an alternative location or time slot.

**Does calling `cancel_reservation` provide information on refund eligibility?**
Yes, `cancel_reservation` checks and returns the exact cancellation policy for that booking ID. You'll see all details regarding refunds and any associated fees.

**What is the scope of areas covered by the `search_parking` tool?**
The server accesses data across over 400 North American cities. Just provide specific coordinates for the location you want to check availability in.

**How do I book a parking spot via the API?**
Use the book_parking action. You need the spot_id, start/end times, a valid payment method ID, and vehicle details (plate, make, model) in JSON format.

**Can I compare prices for different spots?**
Yes! Use search_parking to get a list of spots with their total costs, or use get_pricing to check the specific rate for a single spot over a duration.

**How do I cancel a reservation?**
Use the cancel_reservation action with the reservation_id. Check SpotHero's policy for refund timelines.