Inspiration

Customer service is a large part of the real economy. The U.S. Bureau of Labor Statistics counted about 2.7 million customer service representatives in 2024. At the same time, Salesforce reports that service teams expect AI to resolve 50% of service cases by 2027, up from 30% in 2025. (U.S. Bureau of Labor Statistics, Salesforce State of Service)

WebMCP could make this work more efficient by allowing websites to expose their functions directly to AI agents. But this also creates a practical question:

What happens when an agent successfully calls a tool, but the result is no longer what the user approved?

For example, a customer may approve a refund and cancellation. Before the agent executes it, the refund window expires. The function may still run, but the meaning of the approved outcome has changed.

That became the starting point for ProofDone.

What it does

I developed ProofDone as an individual participant with help from ChatGPT. It is a synthetic subscription-resolution website where a customer asks to refund a €29 charge, stop future renewal, and preserve paid access if the refund is no longer available. The agent prepares the exact effects, and the user approves them on the website. A simulated external account change then expires the refund window. ProofDone rejects the old approval with:

_ STALE_PREVIEW

_Zero writes

_ No executed side effect

The agent must read the account again, discover the permitted fallback, and request approval for the changed effects. After execution, a separate verification step checks the observed account before the agent can confirm success. The final demonstrated result stops future renewal, preserves the paid period, creates no unavailable refund, and reports zero unresolved differences.

How we built it

ChatGPT helped me from the initial market analysis and use-case selection through implementation, debugging, test design, interface improvement, documentation, and evaluation. ChatGPT was my main implementation partner. It helped turn the initial market question into a working product . Codex was used only after the application was complete to help assemble the screenshot-based demo video, narration, subtitles, and technical media checks. ProofDone registers five native WebMCP tools:

get_account_state

get_resolution_options

preview_resolution

commit_resolution

verify_resolution

Together they implement:

Read → Preview → Approve → Commit → Verify

Each preview is bound to the account version, exact effects, an integrity hash, and an expiration time. If the state changes, the approval becomes invalid before any write occurs. The website remains responsible for state, allowed remedies, approval validity, writes, and verification. The AI agent interprets the customer’s request and explains the result, but deterministic TypeScript code decides what may actually happen.

Challenges and learning

The project developed quickly, without a major debugging crisis. The real challenge was defining what “done” should mean.

I learned that approval, execution, and verification are three different claims. A successful commit should not automatically be presented as a successful customer outcome: COMMITTED != VERIFIED

Another challenge was presenting this technical distinction in a way that a normal user could understand. The final interface therefore shows the exact proposed effects before approval and a human-readable Outcome Receipt after verification.

What's next for ProofDone

ProofDone is covered by 20 deterministic tests and was tested with ChatGPT Work and Chrome 152 using WebMCP. Next, I would test the same pattern with a real sandbox API and explore turning the contract logic into a reusable WebMCP component.

Built With

Share this project:

Updates