AOTrust - PDR Notarization
This server provides AOTrust notarization tools for creating, paying for, and verifying cryptographic proof-of-existence PDRs for digital artifacts.
Request a notarization quote with cost, quote ID, payment sink, and PDR schema version.
Create a free PDR from a SHA-256 hash or raw content, returning a shield ID, PDR bundle, and verification URL.
Submit an on-chain NEAR-paid notarization using a work hash and transaction hash, with optional payment binding and agent signatures.
Poll a notarization job by ID to check status and retrieve the signed/anchored PDR.
Notarize a work hash via the x402-over-MCP paid flow using $0.01 USDC on Base.
Provides cryptographic notarization for AI agent work output using the NEAR blockchain.
AOTrust — Cryptographic Proof of Existence for AI Agents
AOTrust issues PDRs (Provenance Data Records) — 239-byte cryptographic receipts proving a digital artifact existed at a specific time. $0.01 USDC via x402 — pay on Base (EVM) or Solana (SVM, via MCP). Anchored hourly to NEAR blockchain. No account needed. Supports ordinary (v0x03) and bilateral (v0x04) signatures.
Positioning: an Independent External Provenance Checkpoint. Native attestations (Sigstore, GitHub artifact attestations) verify a build inside the CI system that produced it. AOTrust complements them: it issues a signed certificate outside GitHub/Microsoft infrastructure and anchors it hourly to the NEAR blockchain — so provenance survives even if the repository is rewritten, the CI logs disappear, or the attestation store is unavailable. Use both.
Agent Checkpoint (new)
Connect your AI coding agent in 60 seconds and make it notarize
plan/patch/release checkpoints — free tier, no account:
agent-checkpoint/ — mcp.json drop-ins for Cursor,
Cline, and any MCP client, plus a copy-paste AGENTS.md block
(Provenance: <Shield ID> in commits).
Related MCP server: x402 Notary MCP
Authorship Claims (bilateral signatures)
Beyond agent workflows, AOTrust supports bilateral PDRs (v0x04): the artifact is signed by you (Ed25519) and countersigned by the notary — a binding hash ties your public key to the content. This turns "I wrote/published this first" into a verifiable claim for any digital artifact: manuscripts, designs, photos, research notes, legal correspondence. Verification is public at https://verify.aotrust.link — no account, no software install for the reader. Signing guide (Ed25519, NEP-413): SKILL.md → Bilateral Signature. See pdr-spec.md §v2.4 for the binding-hash construction.
Quickstart
Prefer one-click? See INTEGRATIONS.md — ready MCP configs for Cursor, Windsurf, Cline, Claude Desktop, plus a "notarize before commit" rule for your assistant and LangChain/CrewAI examples.
# 1. Compute SHA-256 hash of your artifact
HASH=$(echo -n "Hello AOTrust" | sha256sum | cut -d' ' -f1)
# 2. Request notarization → get 402 payment details
curl -X POST https://api.aotrust.link/notarize \
-H "Content-Type: application/json" \
-d "{\"work_hash\":\"$HASH\",\"agent_sig\":\"\",\"agent_pubkey\":\"\"}"
# 3. Pay $0.01 USDC on Base (EIP-3009), then POST with x-payment header
# Full example: see SKILL.md → "Step 3: Pay"For full EIP-3009 signing code (Python + ethers.js examples), see SKILL.md.
Interfaces
Interface | Best for | Auth |
HTTP API | Developers, scripts, CI/CD | x402 payment (no API key needed); free tier 5/day/IP |
MCP | AI agents (Claude, Cursor, Cline) | None for discovery + free tools (notary_free 5/day/IP) |
Authentication & keys
Notarization is keyless. Standard notarization (free tier and x402
micropayments) never requires an API key — payment is in-band (x402
x-payment header) and free calls are IP rate-limited.
AO_TRUST_KEY is optional and only used by the GitHub Action
(action/notarize.py) to unlock the dedicated CI rate limit (50/24h per key,
via X-Api-Key on /v1/shield/free) instead of the shared per-IP free limit
(5/24h). It is an opt-in convenience for CI pipelines — nothing else reads it,
and no secret ever enters a PDR.
Endpoints:
API:
https://api.aotrust.link/notarizeMCP:
https://api.aotrust.link/mcpVerify:
https://verify.aotrust.linkDocs:
https://docs.aotrust.link
Verify API (public, embeddable)
Verification is a standalone public API — no account, no rate limits, no payment. Embed it in your product (dashboards, audit tools, escrow flows) or call it from the terminal:
# Verify a PDR (base64url-encoded bundle):
curl https://api.aotrust.link/v1/pdr/verify/<pdr_b64url>
# → {"valid": true, "checks": {...}, "error": null}
# Look up a PDR by Shield ID (8 hex chars):
curl https://api.aotrust.link/v1/shield/lookup/<shield_id>
# → {"found": true, "pdr_b64": "...", "shield_id": "..."}
# Get the notary public key for offline verification:
curl https://api.aotrust.link/v1/notary/pubkeyPrefer full offline trust? pdr_parser.py verifies any PDR locally — zero dependencies, no network, no trust in our servers.
Offline Merkle verification (anchored receipts)
Anchored PDRs carry the hourly Merkle root committed on-chain in the NEAR
contract notary-node.near — readable from any public NEAR RPC, forever,
independent of our servers. The verify API returns merkle_proof,
merkle_index, merkle_leaf and merkle_tree_size for anchored PDRs.
Save the verify JSON response — then verify it forever, offline:
# (once) save the verify response when the receipt is fresh:
curl https://api.aotrust.link/v1/pdr/verify/<pdr_b64url> > verify.json
# (any time, no AOTrust server needed) check inclusion:
python3 verify_merkle_inclusion.py \
--leaf <merkle_leaf> --proof <comma-joined merkle_proof> \
--index <merkle_index> --root <merkle_root> \
--tree-size <merkle_tree_size>
# → VALID
# the root can always be re-checked against the chain itself via any
# NEAR RPC: contract notary-node.near, method get_root({"seq": N})verify_merkle_inclusion.py is standalone and
zero-dependency (RFC 9162 §2.1.3.2 walk, same hashing as the anchoring
engine). tree_size must be taken from the verify response (or a published
anchor snapshot), not chosen by the verifier.
PDR Specification & Tools
pdr-spec.md — PDR v2.3/v2.4 binary format (Internal 193B + External 239B, ordinary + bilateral)
pdr_parser.py — standalone parser, zero dependencies, offline verification
aotrust-notarize/SKILL.md — full integration guide for AI agents
Comparison
Feature | AOTrust | Chainlink | OpenTimestamps | Notary.fyi |
Price/PDR | $0.01 | $0.25+ | Free (slow) | $0.50+ |
Payment rail | x402 USDC | LINK | Bitcoin TX | Stripe |
PDR format | 239B binary | Oracle data | OTS file | |
AI agent native | MCP + HTTP | No | No | No |
Blockchain anchor | NEAR (hourly) | Ethereum | Bitcoin | None |
Offline verify | Yes (pdr_parser.py) | No | Yes | No |
GitHub Action
Notarize build artifacts or AI-generated files directly in CI/CD — free, no wallet needed.
- uses: GitSerge-crypto/aotrust-skills@v1.1
with:
files: dist/*Outputs: shield_id, verify_url, pdr_b64. Results appear in $GITHUB_STEP_SUMMARY as a markdown table with verification links.
Example workflow
name: Release
on:
release:
types: [published]
jobs:
notarize:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: GitSerge-crypto/aotrust-skills@v1.1
with:
files: dist/*
- name: Show shield ID
run: echo "Shield ID: ${{ steps.notarize.outputs.shield_id }}"License
MIT
Available Tools
5 toolsnotary_freeA
Create a free cryptographic proof of existence (PDR) for a digital artifact without payment. Dual mode: pass work_hash (Mode A, client-computed SHA-256 hex) OR content (Mode B, raw text/code ≤60KB — server hashes it, zero retention). Subject to rate limits (5/IP/day, 1000/day global). Returns shield_id, pdr_b64, and verify_url. For on-chain settlement proof, use notary_notarize_paid ($0.01 USDC on Base).
Inputs: content, metadata, work_hash. Returns: object
notary_notarizeA
Submit a work artifact for on-chain notarisation (NEAR_DIRECT payment path). PREREQUISITE: Send the NEAR amount from notary_quote to the sink account, then provide the resulting tx_hash here. The server verifies the on-chain payment and submits the notarisation. Payment binding: pass payer_account (the NEAR account that paid) and bind_sig — a base64 Ed25519 NEP-413 signature over 'AOTrust AITP-BIND v1 work_hash:<64hex> tx_hash:<tx_hash>'. Returns job_id — use notary_verify to poll for the signed PDR. Step 3 of the notarisation flow: quote -> pay -> notarize -> verify.
Inputs: tx_hash (required), work_hash (required), bind_sig, metadata, +4 more. Returns: object
notary_notarize_paidA
Notarize a work hash on AOTrust (mainnet NEAR + Base USDC receipt). $0.01 USDC via x402-over-MCP: call without payment to receive PaymentRequired; retry with params._meta['x402/payment'] = signed PaymentPayload (EIP-3009, scheme exact, eip155:8453). HTTP clients: POST /notarize with x-payment header.
Inputs: work_hash (required), agent_sig, agent_pubkey. Returns: object
notary_quoteA
Request a notarisation quote for a work artifact. Returns the cost ($0.01 USDC or NEAR equivalent), a quote_id valid for 600 seconds, the sink account to send payment to, and the PDR schema version. Step 1 of the notarisation flow: quote -> pay -> notarize -> verify.
Inputs: work_hash, pdr_version. Returns: object
notary_verifyA
Verify a notarisation by job_id. Returns status (pending/anchored/error). If anchored, returns the full PDR record (base64, 239 bytes) with Ed25519 signature verification. Step 4 of the notarisation flow: quote -> pay -> notarize -> verify. Can be polled repeatedly until status changes from 'pending' to 'anchored'.
Inputs: job_id (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Most tools are distinct, but notary_notarize and notary_notarize_paid both perform paid notarisation on different payment rails, and the generic name notary_notarize can be mistaken for the default paid path. The descriptions clarify the quote/pay/notarize/verify flow, but the overlap still risks misselection.
All tools consistently use the notary_ prefix and action-oriented suffixes, which is predictable. However, notary_notarize vs notary_notarize_paid is slightly misleading because notary_notarize is itself a paid NEAR_DIRECT path, not the general or free operation.
Five tools are well-scoped for a focused notarisation workflow: free proof, quote, two paid notarisation rails, and verification. Each tool has a clear role in the lifecycle.
The surface covers the core lifecycle of quote, payment, notarisation, and verification, plus a free proof path. Minor gaps include no direct retrieval of paid PDRs by a shield_id or listing of past notarisation jobs, but these are workarounds rather than critical dead ends.
Maintenance
Related MCP Connectors
Timestamped proof that AI outputs and data existed, anchored on the Privi blockchain.
Privacy-first document verification anchored to the public ledger.
Prove a web page or document existed on a date: public SHA-256 registry anchored in Bitcoin. Free.
Timestamp & verify evidence on-chain, free. Proofpack: a portable BEEF+BUMP proof bundle per txid.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to sign decisions with post-quantum cryptographic proofs and maintain secure audit trails for compliance. It provides tools for stamping events, verifying chain integrity, and exporting audit data across industries like finance and healthcare.481 npmMIT
- AlicenseAqualityBmaintenanceCryptographic receipts for AI outputs — signed, chain-anchored, $0.001/call6119 npmMIT

markovian-mcpofficial
AlicenseAqualityCmaintenanceBitcoin-anchored provenance for AI outputs; enables stamping, verifying, and tracing outputs with offline-verifiable canonical roots.3Apache 2.0- FlicenseNot gradedqualityDmaintenanceCryptographically anchored, tamper-evident evidence receipts for AI agents — verified run receipts, existence-at-time proofs, and cited answers from an anchored public record. Remote MCP with proof-gated settlement; attests existence and integrity, never truth.-