MCP lab · one local evidence loop
The design loop,
callable.
Three tools let a coding agent render the interface, check the evidence, and prove why consequential decisions exist. The default stays model-free. Add explicit adapters when the work needs visual judgment or SwiftUI evidence.
The public contract
See. Check. Explain.
Each tool does one job and returns typed output plus read-only ads://resources. There is no generic shell tool hiding behind the protocol.
- 01
See
ads_renderRender the interface
Capture a local URL or root-confined TSX component in a real browser, or call a configured SwiftUI snapshot adapter.
Inspect request + result
request { "target": { "type": "url", "url": "http://127.0.0.1:3000/mcp" }, "states": [ "default" ], "viewports": [ { "width": 390, "height": 844 }, { "width": 1280, "height": 800 } ], "waitFor": "main" }result { "status": "complete", "capturedStates": [ "default" ], "viewports": [ "390x844", "1280x800" ], "seriousAxeViolations": 0, "horizontalOverflowAt": [], "touchTargetsUnder44": [] } - 02
Check
ads_evaluateEvaluate the evidence
Normalize deterministic gates into a review packet, then keep judgment human-owned or call an explicitly configured visual judge.
Inspect request + result
request { "runId": "run_ms0ubiex_26ad1c244418", "judge": { "mode": "none" }, "rubric": { "task": "Make the ADS MCP understandable on mobile and desktop", "criteria": [ { "name": "Design Quality", "weight": 35 }, { "name": "Originality", "weight": 30 }, { "name": "Craft", "weight": 20 }, { "name": "Functionality", "weight": 15 } ] } }result { "status": "needs_human", "verdict": null, "scores": null, "blockers": [] } - 03
Explain
ads_traceTrace the decisions
Verify that consequential decisions map to captured skill rules, source constraints, implementation files, and evidence from the same run.
Inspect request + result
request { "runId": "run_ms0ubiex_26ad1c244418", "context": "ADS MCP public lab", "decisions": [ "semantic-contract-surface" ] }result { "valid": true, "errors": [], "resources": [ "trace", "trace-validation" ] }
Frozen verification
One client. One run.
Receipts all the way down.
This packet is generated through the compiled stdio server and a real MCP client. It is a local verification artifact, not a simulated dashboard feed.
run_ms0ubiex_26ad1c244418- 01
ads_rendercomplete2 viewports · 0 blocking gates - 02
ads_evaluateneeds_humandeterministic checks passed - 03
ads_tracevaliddecision provenance verified
Read-only evidence
The run stays inspectable.
Large artifacts remain outside the chat transcript. Agents can fetch only the known files recorded for a run; the server never becomes a general filesystem browser.
ads://runs/{runId}/manifestads://runs/{runId}/evidenceads://runs/{runId}/receiptads://runs/{runId}/reportads://runs/{runId}/traceads://runs/{runId}/trace-validationads://runs/{runId}/screenshots/{filename}
The honest boundary