One local proof 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 native Apple interface evidence.

TransportLocal stdio
ToolsExactly 3
Render targetsWeb + native Apple
Visual verdictExplicit opt-in

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.

  1. 01

    See

    ads_render

    Render the interface

    Capture a local web address or root-confined component in a real browser, or call a configured native Apple snapshot adapter.

    Inspect request and 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": [],
      "touchTargetsUnder48": []
    }
  2. 02

    Check

    ads_evaluate

    Evaluate the evidence

    Normalize deterministic gates into a review packet, then keep judgment human-owned or call an explicitly configured visual judge.

    Inspect request and 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": []
    }
  3. 03

    Explain

    ads_trace

    Trace the decisions

    When provenance was captured during render, verify that consequential decisions map to exact manifest skill rules, source constraints, implementation files, and evidence from the same run.

    Inspect request and 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 standard-input server and a real Model Context Protocol client. It is a local verification artifact, not a simulated dashboard feed.

Local evidence verificationrun_ms0ubiex_26ad1c244418
  1. 01ads_render
    complete2 viewports with 0 blocking gates
  2. 02ads_evaluate
    needs_humandeterministic checks passed
  3. 03ads_trace
    validdecision provenance verified
@modelcontextprotocol/sdkPlaywright Chromium2026-07-25

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}/manifest
  • ads://runs/{runId}/evidence
  • ads://runs/{runId}/receipt
  • ads://runs/{runId}/report
  • ads://runs/{runId}/trace
  • ads://runs/{runId}/trace-validation
  • ads://runs/{runId}/screenshots/{filename}

The honest boundary

Proof travels with the work.
Judgment does not disappear.