Agents and Developers

MCP Documentation

A public MCP server exposing the GetValetParking.com US valet directory via 8 tools. Agents use these tools to find operators by city, service type, or geographic coordinate across 31,000+ cities and 789 operators, and to submit a quote request that only reaches an operator after the requester confirms it by email.

What this is

The GetValetParking MCP server provides structured, real-time access to the US valet parking operator directory. Seven tools read the directory. One tool, valet_request_quote, submits a quote request, and it never reaches an operator until the person named on the request confirms by email. The server runs on Cloudflare Workers at https://api.getvaletparking.com/mcp using the Streamable HTTP transport defined in the MCP 2025-06-18 specification.

Every tool response includes a data_freshness field with an indexed_at timestamp so agents can evaluate recency before presenting results. Operator data refreshes from Payload to Typesense daily at 03:00 UTC.

Tool overview

Tool name Title Cost (points)
valet_list_services List Valet Services 1
valet_get_operator Get Operator Profile 2
valet_search_cities Search Cities 1
valet_find_operators_in_city Find Operators In City 1
valet_search_by_service_and_city Search By Service And City 1
valet_find_nearest_operators Find Nearest Operators 3
valet_find_operators_near Find Operators Near 3
valet_request_quote Request Valet Quote 5

Tool reference

List Valet Services

valet_list_services

List the 9 canonical valet service slugs with display name and category. Use this when an agent needs to validate or discover the supported service taxonomy before composing a follow-up search (e.g. valet_search_by_service_and_city). Returns the in-bundle catalog; no upstream call; no isError path.

Idempotent: yes  |  Read-only: yes

No input parameters required.

Output fields

  • services : The 9 canonical valet service types, in catalog order
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Get Operator Profile

valet_get_operator

Get the full operator profile by slug including address, phone, website, services, venues_served, FAQs, and tipping note. Use this when an agent has a slug from a search tool or directory URL and needs the complete profile to rank or present. Returns isError on slug 404 or upstream outage.

Idempotent: yes  |  Read-only: yes

Input parameters

Name Type Required Description
slug string yes Canonical kebab-case operator slug (e.g. '12-oaks-parking-llc'). Lowercase letters, digits, hyphens only.

Output fields

  • operator : The full merged operator profile (Typesense + Payload long-tail fields)
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Search Cities

valet_search_cities

Search the cities directory by name prefix with population-ranked results. Use this when an agent needs to resolve a partial city name into a canonical city slug plus state slug plus lat/lng before composing valet_find_operators_in_city or valet_find_operators_near. Empty array if no matches.

Idempotent: yes  |  Read-only: yes

Input parameters

Name Type Required Description
query string yes Partial or full city name (>=2 chars). Matched against name and lowercase name fields with prefix semantics.
limit integer no Max results to return; default 8, capped at 25

Output fields

  • cities : Cities matching the query, ranked by text match then population desc
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Find Operators In City

valet_find_operators_in_city

List valet operators serving a city slug plus state slug, optionally narrowed by service. Use this when an agent has a city already disambiguated and wants its operator roster ranked by listing tier then name. Empty array if no listed operators.

Idempotent: yes  |  Read-only: yes

Input parameters

Name Type Required Description
state_slug string yes Lowercase kebab-case US state slug (e.g. 'tx', 'new-york')
city_slug string yes Lowercase kebab-case city slug (e.g. 'houston', 'san-francisco')
service string no Optional service narrowing. One of the 9 canonical valet service slugs. Omit to list every operator serving the city.
limit integer no Max results to return; default 10, capped at 50

Output fields

  • operators : Operators serving the city, ranked tier:desc then name:asc. Empty array means no matches.
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Search By Service And City

valet_search_by_service_and_city

Search valet operators by service slug plus city slug across all matching states. Use this when an agent has both a service slug and a city slug and wants a cross-state tier-then-name ranked list. Invalid service slugs surface the 9 canonical alternatives.

Idempotent: yes  |  Read-only: yes

Input parameters

Name Type Required Description
service_slug string yes Required canonical valet service slug. One of 9 values; call valet_list_services for the full set.
city_slug string yes Lowercase kebab-case city slug (e.g. 'austin', 'springfield'). May match multiple cities across states.
limit integer no Max results to return; default 10, capped at 50

Output fields

  • operators : Operators offering service_slug in any city matching city_slug across all states. Empty array means no matches.
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Find Nearest Operators

valet_find_nearest_operators

List nearest valet operators within a 100-mile cap of a coordinate, optionally narrowed by service. Use this when a user is in a city with no listed operators and you need the closest available fallback ranked nearest-first. Empty array if nothing within 100 miles.

Idempotent: yes  |  Read-only: yes

Input parameters

Name Type Required Description
lat number yes Latitude in decimal degrees (WGS84). Range: -90 to 90.
lng number yes Longitude in decimal degrees (WGS84). Range: -180 to 180.
service string no Optional service narrowing. One of the 9 canonical valet service slugs. Omit to list every nearby operator regardless of services offered.
limit integer no Max results to return; default 10, capped at 50

Output fields

  • operators : Operators within 100 miles of the input coordinate, sorted nearest-first. Empty array means nothing within 100 miles.
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Find Operators Near

valet_find_operators_near

Find valet operators within a given radius of a coordinate, ranked by listing tier then distance. Use this when you have a coordinate and an event-context radius (5mi single venue, 25mi metro, 50mi regional). radius_miles is required; empty array if no matches.

Idempotent: yes  |  Read-only: yes

Input parameters

Name Type Required Description
lat number yes Latitude in decimal degrees (WGS84). Range: -90 to 90.
lng number yes Longitude in decimal degrees (WGS84). Range: -180 to 180.
radius_miles number yes Search radius in miles. REQUIRED, no default. Pick based on context: 5 mi for a single venue, 25 mi for a metro, 50 mi for a regional sweep.
service string no Optional service narrowing. One of the 9 canonical valet service slugs. Omit to list every operator within radius regardless of services offered.
limit integer no Max results to return; default 10, capped at 50

Output fields

  • operators : Operators within radius_miles of the input coordinate, ranked tier:desc then distance:asc. Empty array means no matches within radius.
  • data_freshness : TOOL-10 freshness stamp
  • _meta : TOOL-11 ToS and attribution block

Request Valet Quote

valet_request_quote

Submit a valet parking quote request to the operators serving a US city. Use this when a person has asked you to arrange valet and has given their name, email, phone, city, service type and event date. The request is only sent after they confirm by email.

Idempotent: no  |  Read-only: no

Input parameters

Name Type Required Description
contact_name string yes The requester's full name
contact_email string yes Email address to send the one-tap confirmation link to
contact_phone string yes Phone number the operator can call
city_slug string no Canonical kebab-case city slug from valet_search_cities, e.g. 'austin'. Omit if using city_other.
city_other string no Free-text city name when no directory slug is known. Omit if using city_slug.
service string yes One of the 9 canonical valet service slugs
event_date string yes Event date in YYYY-MM-DD format
guest_count integer no Approximate guest count, if known
vehicle_count integer no Approximate vehicle count, if known
notes string no Free-text notes for the operator, e.g. venue name or timing details
operator_slug string no Send to this one operator only instead of the full fan-out for the city. Omit to notify every matched operator in the city.

Output fields

  • reference : Short human-readable reference for this quote request
  • status : Always pending-confirmation on success
  • next : What the agent should tell the person to do next
  • _meta : TOOL-11 ToS and attribution block

Requesting a quote (write tool)

Call valet_request_quote (or the REST alias below) with the requester's contact details, city, service, and event date. The person named on the request gets a confirmation email with a one-tap link. Only after they click it do the matched operators in that city get notified. Nothing is sent to any operator on the tool call alone.

Limits: a maximum of 3 unconfirmed requests per email address in a rolling 24 hours, and the confirmation link expires 24 hours after it is issued.

Worked example: MCP tool call

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"valet_request_quote","arguments":{
  "contact_name":"Dana Reyes","contact_email":"dana@example.com","contact_phone":"512-555-0142",
  "city_slug":"austin","service":"wedding-valet","event_date":"2026-11-14","guest_count":150,
  "notes":"Ceremony at 4pm, 60 cars expected."}}}

Response

{"reference":"GVPQ-7K2M4QAB","status":"pending-confirmation","next":"Ask the person to open the confirmation email we just sent and tap the link. Nothing is sent to any operator until they do."}

REST alias

Same schema, plain JSON, no MCP client required.

curl -X POST https://api.getvaletparking.com/v1/leads \
  -H "content-type: application/json" \
  -d '{"contact_name":"Dana Reyes","contact_email":"dana@example.com","contact_phone":"512-555-0142",
       "city_slug":"austin","service":"wedding-valet","event_date":"2026-11-14","guest_count":150,
       "notes":"Ceremony at 4pm, 60 cars expected."}'

Limitation: the tool cannot tell the agent whether the person confirmed. The person is contacted directly by the operators, not by this server.

Install

The MCP server uses the Streamable HTTP transport. Most clients support it directly via a URL key. Claude Desktop requires the mcp-remote bridge package.

Claude Desktop

Add the following to your Claude Desktop config file. On macOS the config lives at ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows the config lives at %APPDATA%\Claude\claude_desktop_config.json.

{
  "mcpServers": {
    "valet-parking-directory": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://api.getvaletparking.com/mcp"
      ]
    }
  }
}

Cursor

Add the following to your Cursor MCP config. Global config: ~/.cursor/mcp.json. Project config: .cursor/mcp.json at the project root.

{
  "mcpServers": {
    "valet-parking-directory": {
      "url": "https://api.getvaletparking.com/mcp"
    }
  }
}

Continue

Add the following to your Continue config at .continue/config.yaml.

mcpServers:
  - name: valet-parking-directory
    type: streamable-http
    url: https://api.getvaletparking.com/mcp

Cline

Add the following entry to your Cline MCP server configuration.

{
  "mcpServers": {
    "valet-parking-directory": {
      "url": "https://api.getvaletparking.com/mcp",
      "disabled": false,
      "autoApprove": []
    }
  }
}

ChatGPT

Open ChatGPT Settings, then Apps and Connectors, then Add. Enter Name: valet-parking-directory. Enter URL: https://api.getvaletparking.com/mcp. This requires ChatGPT Pro, Team, Enterprise, or Edu. Steps may vary; refer to current ChatGPT documentation.

Rate limits

Each tool call consumes a point budget. The budget is 100 points per 60-second rolling window, measured per (IP, session) pair. A per-IP-per-day cap of 1,000 calls applies; exceeding it for two consecutive days triggers a 24-hour tarpit response. Per-tool kill switches are available as a manual override. Per-tool costs appear in the Tool overview table above.

Data freshness

Operator data refreshes from Payload to Typesense daily at 03:00 UTC. The data_freshness field on every tool response includes the indexed_at timestamp and a source tag. If Payload-vs-Typesense drift exceeds 5%, tool responses return a transient 503 with a Retry-After header; drift between 1% and 5% adds adata_freshness.warning field with the current drift percentage. Drift status is observable via the mcp:drift_flag KV key.

Service taxonomy

The valet_list_services tool returns the following 9 canonical service slugs. Pass these as the service or service_slug parameter when filtering operators by service type.

Slug Display name
wedding-valet Wedding Valet
corporate-event-valet Corporate Event Valet
private-event-valet Private Event Valet
funeral-valet Funeral Valet
hotel-resort-valet Hotel & Resort Valet
restaurant-valet Restaurant Valet
hospital-medical-valet Hospital & Medical Valet
major-venue-valet Major Venue Valet
general-valet General Valet Service

Terms of use

This server is a public MCP interface. Seven tools are read-only. Permitted use: real-time agent queries grounded in a user intent. Prohibited: bulk extraction, dataset construction, or redistribution of operator data. The eighth tool, valet_request_quote, is not read-only: it submits a quote request on behalf of a real person named on the request, and it never reaches an operator until that person confirms by email. Read the MCP terms.

Contact

Questions about this server: hello@getvaletparking.com.