Inspiration
AI can read a packet in seconds. The hard part is showing a person exactly what it used—without quietly turning the agent into the decision-maker. Evidence-heavy procurement, compliance, audit, and dispute decisions need agent speed, but they also need human accountability and a reviewable chain of evidence.
What it does
Evidence Desk gives an agent four bounded WebMCP tools over a signed synthetic packet: search_evidence, inspect_exhibit, evaluate_claim, and update_caseboard. The agent searches thirteen exhibits, inspects hash-linked source spans, evaluates a contested claim, and proposes evidence to a shared caseboard.
The demo makes one contradiction visible: the packet records acceptance on March 14, while the signed inspection report says inspection occurred March 19. The evaluator returns CONTRADICTED with two reasons tied to exact spans. Then the agent stops. It cannot pin or remove evidence, reject a proposal, approve the verdict, or seal the receipt. Those decisions remain human-only.
How we built it
The TypeScript and Vite app registers four tools with awaited document.modelContext.registerTool(...) calls. Inputs are validated at runtime, outputs are bounded JSON strings, and corpus text is treated as untrusted. Real tool executions emit visible started and completed lifecycle events in the provenance rail.
An Ed25519-signed manifest and per-span SHA-256 checks quarantine altered evidence before evaluation. After human adjudication, Evidence Desk creates a readable, locally signed receipt binding the tool trail, evidence, final human decision, and signed build manifest. The app runs entirely client-side on synthetic data, and its runtime application logic makes no network requests.
Challenges we ran into
The central engineering challenge was separating capability from authority. Registration is not execution, simulation is not live provenance, a proposal is not approval, and a structurally valid receipt is not meaningful if it seals zero accepted evidence.
We hardened those boundaries: simulation-only sessions stay labeled SIM; untrusted receipt entries fail verification instead of throwing; the evaluator accepts common date-and-event word orders while rejecting unrelated or impossible dates; long reason lists disclose their full meaning; and sealing refuses an empty evidence anchor.
Accomplishments that we're proud of
All four production tools executed live on the deployed page. Every call showed its started and completed lifecycle events. The evaluator produced a span-tied CONTRADICTED verdict, while the agent remained unable to perform the human-only actions.
The Forgery Bench makes the trust boundary testable: change one signed date byte and the manifest check quarantines the exhibit, withdraws the verdict, and refuses sealing. The implementation closes with 189 passing tests, typecheck, and a production build.
What we learned
WebMCP is most valuable here not as UI automation, but as a semantic contract between a person, an agent, and shared evidence. The agent becomes faster and more precise without inheriting the person's authority. Visible provenance and negative controls matter as much as the happy path.
What's next for Evidence Desk
The next step is moving from the synthetic packet to user-supplied signed evidence bundles, durable organizational signing keys, trusted timestamps, and configurable reviewer roles—while preserving the same human-only adjudication boundary.
The current local receipt is tamper-evident, not tamper-proof. It does not prove identity or trusted time and is not a legal signature.
Agent proposes. Human decides. Evidence preserves what happened.
Built With
- document.modelcontext
- ed25519
- sha-256
- typescript
- vercel
- vite
- vitest
- webmcp
Log in or sign up for Devpost to join the conversation.