Inspiration
WebMCP makes websites actionable by AI agents, which is powerful, but a lot of useful actions depend on private user data.
The problem is that the easiest way to build these workflows is often to give the agent the raw data it needs. That can put sensitive information into model context, logs, traces, or downstream systems.
We wanted to see if there was a better way: let the agent act, without giving it the full private record.
What it does
Mirror WebMCP Secure adds a privacy boundary around native WebMCP Site Tools.
Our demo is a procurement workflow. A buyer wants to purchase GPUs. The buyer has private requirements, and the seller has private pricing rules.
Instead of copying the buyer's full record into ChatGPT, the website seals that private state into a short-lived, context-bound capability.
ChatGPT can then use native procurement Site Tools through that capability.
Only the information needed for the action is passed across, and sensitive steps still require explicit user approval.
The end result is that the agents can find a product, request a proposal, release it, and accept it without either side getting the other's full private context.
Why WebMCP is a good fit
This is more than a chatbot reading a webpage.
The agent needs to discover structured actions from the site and then use them to:
- find compatible products
- request a seller proposal
- release an offer
- accept it
WebMCP gives us that action layer.
Mirror sits around those actions and controls what private data they are allowed to receive and what result they are allowed to return.
Better user experience
Without this kind of boundary, the user either has to expose sensitive information to the agent or do more of the workflow manually.
With Mirror, the user keeps the private data on the website and lets ChatGPT handle the workflow through Site Tools.
The user only steps in when something important needs approval.
That means the agent can still be useful, while the user keeps control over what gets disclosed and when.
How we built it
The website exposes four native procurement Site Tools:
procurement.find_private_matchesprocurement.request_seller_proposalprocurement.release_proposalprocurement.accept_proposal
The buyer form is sealed into a restricted mirrorh_... capability instead of being copied into agent context.
Mirror acts as the boundary between the private website state, the user agent, and the seller-side action.
The seller receives only the minimum approved handoff needed to make the proposal.
The seller-side inference also runs through Mirror using ciphertext compute.
ChatGPT discovers and invokes the tools natively through WebMCP rather than relying on visual page automation.
Challenges we ran into
The main challenge was making the workflow useful without leaking more private data than necessary.
We also wanted to avoid a fake-looking demo where everything happens through a local button. The actual flow had to work through native Site Tools.
Another challenge was approvals.
Releasing a proposal and accepting it are different decisions, so we treated them as separate approval steps rather than collapsing them into one.
We also wanted the privacy claims to be visible, not just something we said in the description. So the demo includes a proof view showing what each side actually received.
Accomplishments that we're proud of
We got the complete native WebMCP flow working end to end.
Two agents can collaborate on the procurement task while each side keeps its private context.
At the end of the demo:
- the seller does not receive the buyer's budget
- the seller does not receive the browser handle
- the seller's private price floor is not returned
buyer fields returned: 0
At the same time, the workflow still produces a real usable offer.
That balance between usefulness and privacy is the part we're most proud of.
What we learned
One thing that became very clear while building this is that tool access and data access are not the same problem.
WebMCP defines what the agent can do.
Mirror focuses on what private data that action can receive, and what result is allowed to leave the boundary.
We also learned that approval works better when it is tied to meaningful user decisions rather than added as a generic confirmation step.
What's next for Mirror WebMCP Secure
This procurement flow is just one example.
The same pattern could be useful in finance, healthcare, legal, and enterprise workflows where agents need to act on sensitive information without directly owning the raw data.
Next, we want to explore richer tool policies, stronger capability binding, more multi-agent workflows, and an easier integration path for developers who want to add privacy-preserving WebMCP actions to existing sites.
Live demo: https://mirror-webmcp-secure.vercel.app/
Source code: https://github.com/mirrorsecai/mirror-webmcp-secure
Built With
- agents
- ai
- chatgpt
- encryption
- javascript
- llm
- multi-agent
- next.js
- openai
- privacy
- systems
- typescript
- vercel
- web
- webmcp
Log in or sign up for Devpost to join the conversation.