- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Documented (README)
- !No description
git clone https://github.com/JasonCZMeng/assayResumen de Tools
# Assay
**The quality oracle for the x402 agent economy** — [x402](https://www.x402.org/) being
the open protocol that lets machines pay for HTTP APIs with stablecoin micropayments.
Assay pays real USDC to probe machine-payable services, verifies what actually comes
back, and sells the resulting quality scores — every rating backed by an on-chain
payment receipt and a Bitcoin-anchored evidence trail.
**Live:** [assay.nominal-labs.com](https://assay.nominal-labs.com) ·
[Leaderboard](https://assay.nominal-labs.com/leaderboard) ·
[Agent guide (SKILL.md)](https://assay.nominal-labs.com/SKILL.md)
## The problem
Agents are starting to buy API responses from other machines over x402 — HTTP 402
payment challenges settled in USDC on [Base](https://base.org) (Coinbase's Ethereum L2),
no accounts, no invoices. Tens of thousands of services already advertise themselves in
discovery catalogs like the Coinbase x402 Bazaar. But an agent holding a wallet has no
way to know which of them actually deliver: whether payment settles, whether the
response matches the advertised schema, whether the data is even true. The trust signals
that exist score *liveness* — uptime, latency, payment telemetry. Nobody pays these
services and verifies what actually comes back. Paying to find out is the only real test
— so that's what Assay does, on a schedule, with its own money, so your agent doesn't
have to.
## How scoring works
Assay probes a curated set of x402 services several times a day, at randomized times,
with real paid requests. Each probe is scored on four independent checks:
| Component | Weight | Question it answers |
|---|---|---|
| Settlement | 40% | Did payment settle and a response come back? (tx hash recorded) |
| Schema | 30% | Does the response match the service's advertised output schema? |
| Ground truth | 20% | Does the data agree with an independent reference source? |
| LLM judge | 10% | Does the response deliver what the service claims to sell? |
Weights renormalize over the components a service has data for. A service's **composite
score (0–100)** is computed over its trailing 30 days of probes and publishes only once it
has **20+ probes spread across days** — no scores from thin evidence. Tiers: **gold** ≥ 85,
**ok** ≥ 60, otherwise **avoid**.
## Why the history can't be quietly rewritten
Scores are only as trustworthy as the evidence behind them, so the probe corpus is
append-only and publicly anchored:
- Every probe row (settlement result, response hash, paid amount, tx hash) becomes a leaf
in a per-day **Merkle tree**; the root is anchored to **Bitcoin** via
[OpenTimestamps](https://opentimestamps.org/) (OTS) after a safety lag.
- Daily Merkle roots and their OTS proofs are public at
[`/api/digests`](https://assay.nominal-labs.com/api/digests).
- Anything that ever touches recorded history — migrations, re-anchoring — is logged in
the open in [docs/CORPUS-LOG.md](docs/CORPUS-LOG.md).
The accumulating corpus is the point: anyone can copy the code, but nobody can backdate
the evidence — the anchors prove when each day's records existed.
## Using Assay
**HTTP** — the oracle itself is an x402 service at `https://assay.nominal-labs.com`.
Paid endpoints answer with an HTTP 402 payment challenge that any x402 client settles
automatically:
| Endpoint | Price | Returns |
|---|---|---|
| `GET /score/{url-encoded service URL}` | $0.005 USDC (Base) | Composite, component breakdown, trend, probe count |
| `GET /tier/{url-encoded service URL}` | free | `gold` / `ok` / `avoid` / `unrated` verdict |
| `GET /leaderboard` | free | All scored services, ranked |
| `GET /api/digests` | free | Daily Merkle roots + OTS proofs |
**MCP server** ([Model Context Protocol](https://modelcontextprotocol.io) — how AI
assistants call external tools) — [`assay-oracle-mcp`](https://www.npmjs.com/package/assay-oracle-mcp)
on npm and the [official MCP registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.JasonCZMeng/assay).
For Claude Code:
```sh
claude mcp add assay -- npx -y assay-oracle-mcp
```
**Spend guard** — [`assay-x402-guard`](https://www.npmjs.com/package/assay-x402-guard)
wraps your agent's paying fetch and throws *before* money moves to a service rated `avoid`:
```ts
import { wrapFetchWithAssay } from "assay-x402-guard";
// payFetch = your x402-paying fetch (e.g. wrapFetchWithPayment from @x402/fetch)
const safeFetch = wrapFetchWithAssay(payFetch);
```
More background: [SUMMARY.md](SUMMARY.md) (what/why) and
[docs/specs/](docs/specs/) (design).
## Development (any OS)
1. `cp .env.example .env` and fill in (all vars documented in the example):
- `PROBE_WALLET_KEY`: fresh dedicated wallet, ≤ $50 USDC on Base mainnet (no ETH
needed — x402 "exact" settles via facilitator using EIP-3009 signatures)
- `ANTHROPIC_API_KEY`: the LLM judge
2. `npm install && npm test` (no network or wallet needed for the suite)
3. `npx tsx scripts/verify-env.mts` — preflight; fails loudly on misconfiguration
4. `npm run dev` — server on :3402 (localhost-bound by default) plus crons:
catalog ingest (6h), probe sweeps (every 4h at :15 + jitter), daily digest anchoring
5. Curate services to probe:
- `npm run curate -- list`
- write a template JSON (see docs/templates/), then
`npm run curate -- add <serviceUrl> <template.json>`
6. Ops dashboard: http://127.0.0.1:3402/dashboard (pause/resume, probe-now, retire/restore)
The money path is deliberately paranoid: a hard per-payment cap, a daily budget summed
from actually-settled amounts, and fail-closed guards on unparsable payment requirements
— all unit-tested with injected fakes.
Note that a fresh deployment starts with an empty corpus — the scores are only as good
as the probe history behind them.
## Production deploys
How the reference instance at assay.nominal-labs.com is operated (adapt for your own):
commit to `main`, ship to the VPS as a git bundle, apply with `git reset --hard` +
`systemctl restart assay` (provisioning and update runbook in
[deploy/README.md](deploy/README.md)). The SQLite file at `data/assay.db` is the product
— never recreate it; the VPS keeps daily on-box snapshots via
`/etc/cron.daily/assay-backup`.
Payments: `PAYMENTS_ENABLED=true` + `RECEIVE_WALLET_ADDRESS` + a
[Coinbase Developer Platform (CDP)](https://portal.cdp.coinbase.com/) API key
(`CDP_API_KEY_ID`/`CDP_API_KEY_SECRET` — the server auto-selects the CDP facilitator
for Base mainnet when both are set).
## Layout
- `src/` — the whole system: server + APIs, prober, scoring, digests, ingest, pages
- `mcp/` — `assay-oracle-mcp`: MCP server (`check_service`, `get_score`, `top_services`)
- `middleware/` — `assay-x402-guard`: wrapFetchWithAssay spend-guard for agents
- `tests/` — vitest; money-path logic unit-tested with injected fakes
- `scripts/` — preflight, wallet rotation, smoke tests; `start-assay.*` are legacy
launchers from an earlier home-PC deployment, superseded by systemd
- `deploy/` — Caddyfile, systemd unit, provisioning runbook
- `docs/` — [CORPUS-LOG.md](docs/CORPUS-LOG.md) (public integrity log), specs, templates
## License
[MIT](LICENSE) — the whole repo, including the npm packages ([`mcp/`](mcp/) and
[`middleware/`](middleware/)). The code is freely reusable; the evidence corpus and its
Bitcoin-anchored history are what a fresh deployment can't copy.
Lo que la gente pregunta sobre assay
¿Qué es JasonCZMeng/assay?
+
JasonCZMeng/assay es tools para el ecosistema de Claude AI con 0 estrellas en GitHub.
¿Cómo se instala assay?
+
Puedes instalar assay clonando el repositorio (https://github.com/JasonCZMeng/assay) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar JasonCZMeng/assay?
+
Nuestro agente de seguridad ha analizado JasonCZMeng/assay y le ha asignado un Trust Score de 77/100 (tier: Trusted). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene JasonCZMeng/assay?
+
JasonCZMeng/assay es mantenido por JasonCZMeng. La última actividad registrada en GitHub es del 2026-08-05, con 0 issues abiertos.
¿Hay alternativas a assay?
+
Sí. En ClaudeWave puedes explorar tools similares en /categories/tools, ordenados por popularidad o actividad reciente.
Despliega assay en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/jasonczmeng-assay)<a href="https://claudewave.com/repo/jasonczmeng-assay"><img src="https://claudewave.com/api/badge/jasonczmeng-assay" alt="Featured on ClaudeWave: JasonCZMeng/assay" width="320" height="64" /></a>Más Tools
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
An AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]
A collection of notebooks/recipes showcasing some fun and effective ways of using Claude.