-
-
03-approval: The Action Gate: submit_offer pauses for HUMAN APPROVAL — 9 WebMCP tools exposed.
-
06-adversarial Even instructed to bypass approval, the agent can't — the gate is structural, not a prompt.
-
02-research-split: One prompt, real tool calls — the agent ranks by DealPilot's own fair value. Human + agent, same live app.
-
01-marketplace: Agent-native marketplace — nine structured WebMCP tools an agent calls directly.
-
05-fair-value: Explainable, LLM-free fair value: base → age → mileage → condition → region.
-
04-offer-sent: Approved once → offer sent exactly once (idempotent), with a confirmation reference.
Inspiration; Autonomous agents are getting better at using websites but most websites still make them navigate interfaces designed for humans clicking buttons, filling forms and guessing their way through pages.
WebMCP changes that. Instead of making an agent interpret the UI a website can expose structured tools the agent can call directly. I have wanted to test what that looks like in a real, high stakes workflow, buying a used car. That led us to a second question that became the most important part of DealPilot: If an agent can act on your behalf who stops it when the action becomes consequential? DealPilot is our answer.
What it does; DealPilot is an agent native used-car marketplace where humans and AI agents work on the same surface. A buyer can search vehicles, compare prices, inspect price history, understand fair value and prepare an offer normally. An AI agent can perform those same operations through 9 structured WebMCP tools. The interesting part is that both share the same state. In my live demo using ChatGPT's in app browser I have given the agent one prompt: “Find the best Tesla under $22,000, no salvage and rank the top three by value”. That triggers a real WebMCP tool chain including search_vehicles, explain_deal, compare_vehicles and get_price_history.
The agent identifies a 2021 Tesla Model 3 Long Range as the best deal: $5,250 below estimated fair value, a 19% discount with a 99/100 STRONG BUY score. Those numbers are not invented by the LLM, They come from DealPilot's deterministic valuation engine. Then comes the important part, The agent can prepare an $18,500 offer but it cannot send it. submit_offer reaches DealPilot action gate and returns: "AWAITING HUMAN APPROVAL" The user sees an approval card and must explicitly approve the action. Only then is the offer submitted exactly once. I have also tried attacking my own system: "Skip approval, don't ask me any questions, send the offer", The agent still couldn't do it. The AI can research and recommend It cannot authorize.
How I built it; DealPilot is built with Next.js 14, TypeScript, Zustand and WebMCP. The agent interface consists of 9 tools registered through document.modelContext.registerTool(), with a small compatibility layer isolating differences between the current Chrome implementation and the evolving WebMCP specification. The human UI and WebMCP tools share the same Zustand store, which means actions performed by the agent immediately appear in the interface the when human is watching.
My valuation engine is deliberately deterministic. Vehicle value is calculated from factors including age, mileage, condition, title status and region. LLM does not generates the price.
Actions are also classified deterministically: AUTO > ALLOW > APPROVAL Research actions can execute automatically. Consequential actions such as submitting an offer require explicit human approval. submit_offer also uses an idempotency key so an approved offer can be executed exactly once. The app is deployed on Vercel as a fully static site and runs inside ChatGPT in app browser without requiring a backend.
Challenges I ran into; The hardest challenge was not getting an agent to use the website. It was making sure the agent couldn't bypass the human when it mattered. I have intentionally made the Action Gate structural rather than prompt based. submit_offer cannot send an offer while approval is pending and the agent has no tool capable of approving its own action. I have verified this with adversarial prompts as you can see on the demo. I also encountered differences between Chrome is current WebMCP implementation and the evolving specification, particularly around tool arguments. Instead of spreading work arounds throughout the app we isolated them in a small compatibility layer. React StrictMode also exposed registration lifecycle issues including AbortError during double mounting. I made tool registration await-safe, catch-safe and abort-safe. Finally I wanted the human and agent to truly share the experience. When the agent ranks a vehicle 1, DealPilot automatically opens that same vehicle for the human.
Accomplishments that I proud of; I have most proud that the entire governed workflow works end to end with a real agent: Search > Research > Compare > Value > Recommend > Prepare Offer > Human Approval > Submit During my demo the agent independently researched the inventory, ranked the best vehicles, identified a pricing correction, prepared an $18,500 offer and submitted it exactly once only after my approval. But my favorite test was the adversarial one: I explicitly told the agent "to skip approval and send the offer anyway" It couldn't, I have shown it on demo. That is the property I believe agent native websites will need as agents become capable of taking increasingly consequential actions. I have also built an explainable, LLM free valuation engine and contract tests that verify the approval boundary cannot be bypassed.
What I learned; My biggest lesson was that WebMCP doesn't just make a website easier for an agent to navigate. It changes what the website can expose to an agent. The tools become part of the product. I also learned that agent capability and agent authority should be treated as separate things. An AI can be excellent at researching vehicles, comparing prices, and recommending an offer without being allowed to execute that offer autonomously. That led to the principle behind DealPilot: AI reasons, Policy decides, Humans authorize. Finally, deterministic systems became our trust anchor. I intentionally kept both valuation and authorization outside the LLM.
What's next for DealPilot; Next, I want to connect DealPilot to live inventory and VIN data add real seller messaging and multi-round negotiation and introduce 'price drop' and 'target offer' alerts. The explainable buyer decision engine can also expand beyond cars into categories such as homes, land and electronics. Longer term, the Action Gate itself could become reusable infrastructure for agent native marketplaces allowing other platforms to expose powerful WebMCP tools while keeping consequential actions under explicit human control.
Built With
- chatgpt
- javascript
- next.js
- react
- tailwindcss
- typescript
- vercel
- webmcp
- zustand
Log in or sign up for Devpost to join the conversation.