Judges:

Open one of these example sites in the ChatGPT in-app browser, and ask about inventory or store hours:

evauto.com

mandalautogroup.com

svgmotors.com

Then run SpaceWebMCP.debug() in the console, if you'd like to explore the tools as well as a live counter of actual agent tool invocations on the page ("calls"):

{
  "api": "document",
  "tools": ["search_inventory", "get_vehicle_details", "get_dealership_info", "submit_lead"],
  "calls": { "search_inventory": 1 }
}

In Chrome 149+, enable the WebMCP flag. Our origin-trial token is already active on evauto.com. You can also point Model Context Tool Inspector at the tab.

Inspiration

Buying a car might be one of the most agent-worthy purchases a person can make.

Shoppers can spend hours filtering inventory, comparing vehicles, checking prices, and jumping around multiple websites. Those sites also tend to be JavaScript-heavy, which makes them especially easy for screen-scraping agents to get wrong. And when an agent gets something wrong on a car site, it might be misquoting the price of a $40,000 purchase.

We run Space Auto, a platform behind real dealership websites, so we made every website on our platform agent-native.

Then we took it a step further. If an agent can search a dealer's inventory and help someone choose a vehicle, it should also be able to finish the job and hand the dealership a real customer.

What it does

Every dealership site on Space Auto's website platform registers WebMCP tools through document.modelContext.

search_inventory

Searches the dealership's current, live inventory by condition, make/model, body style, fuel type, price, year, and mileage. It returns real vehicles with current prices, photos, and links to each vehicle detail page.

get_vehicle_details

Returns the full vehicle specs and the itemized price breakdown for a VIN using the same pricing engine that renders on the website. An agent cannot quote a price the dealer doesn't advertise.

get_dealership_info

Returns dealership locations, phone numbers, hours, and holiday-aware open/closed status.

submit_lead

With the shopper's explicit consent, submit_lead sends their name, contact information, and the vehicle they're interested in to the dealership as a real sales lead, or a test drive appointment.

Every answer from the read tools ends with a natural next step, like asking whether the shopper wants to schedule a test drive or check availability. If the user says yes, the agent collects their contact information, confirms consent, and submits the lead. If the user says no, it drops the subject.

show_search_results

Drives the dealership's own search results page so the shopper can actually watch the filters being applied.

The full funnel

The demo video shows the entire process:

  1. Inventory Search
    Live results from the dealership's current inventory.

  2. Inventory Question
    Vehicle details and pricing using the same tools.

  3. Inventory Selection
    The assistant offers the next step of the process, such as making a test drive appointment or checking availability.

  4. Submit Lead
    With explicit consent, submit_lead sends the shopper's information to the dealer's Auto Agent Protocol endpoint. No API keys are required.

  5. See it in the CRM
    The lead arrives in the dealership's Space Auto CRM within seconds, attributed to the AI assistant.

How we built it

The read side is JavaScript file with no build step necessary. It wraps the Space Auto platform's native services, including the public inventory API client, a shared vehicle cache, and dealership config globals. There's nothing an agent can access that a shopper couldn't access themselves.

The lead path took more thought. The browser tool posts to a small REST proxy on the dealership site. That proxy validates everything before a lead can go anywhere. It requires a real name, a valid email address or phone number, and explicit confirmation of consent. It also rate-limits submissions by IP.

Once validated, the proxy builds an Auto Agent Protocol lead.submit request and sends it to the dealership's own AAP endpoint. Every dealership on the platform already publishes a public agent card. The proxy reads that card to discover the dealership's AAP endpoint automatically.

That means there are no API keys required anywhere in the end to end flow, and nothing to provision for each dealership.

Repeated submissions for the same shopper and vehicle on the same day are deduplicated, and every lead includes a formal consent record:

{
  "consent": {
    "granted_at": "2026-09-03T18:11:14+00:00",
    "allowed_channels": ["email", "phone"],
    "consent_text": "I agree that the dealership may contact me by email or phone about this vehicle.",
    "scope": ["lead_submission"]
  }
}

Challenges we ran into

Our first lead design used per-dealership API keys for our external API.

However, provisioning and managing keys across a network of dealership sites would be a huge chore, so the agent-card approach solved that problem. We went from managing credentials for every dealership to requiring zero credentials in the browser flow.

ChatGPT's in-app browser exposes document.modelContext. Our tools registered successfully. Then ChatGPT answered inventory questions by reading the page anyway.

Registered does not mean invoked; we found a registration race first. We had been registering the tools inside an idle callback, which could delay registration by up to four seconds. Agents can snapshot the available toolset as navigation settles, so sometimes our tools simply weren't present when that happened. We fixed the timing and added call counters to SpaceWebMCP.debug().

Accomplishments we're proud of

This isn't running against sample inventory or a hackathon-only environment. It's live, in production, on every dealership website on our platform.

What we learned

Progressive enhancement is what made WebMCP practical to ship. A dealership page with WebMCP tools still behaves exactly the same for every browser and shopper that doesn't use them.

What's next

We are already looking at the next pieces:

  • Fleet-wide Chrome coverage once the API reaches GA, or through a third-party trial token in the meantime.
  • Support trade-in inquiries through the same lead flow.
  • Better offer language, based on real conversation and invocation data from our tool call counters.

The goal is simple: a dealership website shouldn't just be readable by an AI agent. It should give the agent a safe, structured way to actually help shoppers explore dealership websites as they're searching for their next vehicle.

Built With

  • chrome-origin-trial
  • document.modelcontext
  • javascript
  • rest-api
  • webmcp
Share this project:

Updates

Submission history