A shared-home assistant answers everyone in the room, and every answer teaches the room something. Ask about dinner, then about the early prep window, and two perfectly ordinary replies can add up to certainty about a plan someone wanted kept private. Today's assistants answer each turn in isolation - the leak is in the combination.

Veil is a self-hosted MCP server (JSON-RPC 2.0 over Streamable HTTP, MCP spec 2025-11-25) that puts a disclosure guard in front of a shared assistant. It keeps a ledger of everything the room has heard and checks every candidate reply - answers, refusals, and the final scheduling choice - against the whole transcript before speaking.

What it does, live in the demo:

  • Catches conversation-level leaks. Unguarded, the room narrows a private window from 16 possible calendars to 100% certainty in two questions. With Veil, the room stays at 50/50 - and the assistant still does its job, finding a shared dinner slot that reveals nothing new.
  • Protects windows jointly, not just one at a time. A parity question that any per-window guard would answer is refused, because the answer would expose the joint pattern of two protected windows. All four joint patterns hold at their declared 25% while scheduling still succeeds.
  • Refuses safely. A refusal is identical whether the hidden answer is yes or no, so even the refusal carries no information.
  • Asks first when answering would disclose. The owner previews exactly what the room would learn (100% certainty, 8 calendars left) before approving a single answer. After a disclosure, direct answers pause until reset.
  • Maintains state across sessions. The approval record and guard state are persisted and survive a full server restart - a context-aware add-on, not a stateless wrapper.
  • Runs on real schedule data. Real public calendar feeds (a Premier League fixture list, an F1 race weekend, a conference schedule, public holidays), reduced to busy/free timing, flow through the same importer, guard, and MCP route: protected questions refused, unprotected answered truthfully, a real free window scheduled.

Every claim is executable and checkable: 63,840 exhaustive sweep runs with zero tested violations across single-window and joint models, 5,376 weighted-prior joint runs, an injected leak caught in 24/24 transcript groups, 448 approval-path runs with pending and declined replies indistinguishable, and interoperability with the official MCP Python SDK client. All results are measured inside the declared finite model; artifacts ship in the repo under validation-results/.

The demo uses a simulated Alexa+ web client (clearly labelled), as the hackathon rules allow: no Amazon service or device is contacted, and the MCP server is the real integration surface.

Built by Akash Rajeev. Python standard library only - python3 server.py, no keys, no installs.

Demo video (2:32): https://www.youtube.com/watch?v=9YIenKHycbc

Code, friction log and validation artifacts: https://github.com/akashrajeev/veil

Built With

  • model-context-protocol-(mcp)
Share this project:

Updates

Submission history