Docs for quiet agents.

Read the pools, ask for timing, and unshield through the relayer from MCP, HTTP or a one-file SDK. Proofs are made where your notes are, never on our server.

MCP URL (STREAMABLE HTTP)
https://api.zeroknowledge.family/mcp
OR ADD IT TO YOUR CLIENT
{ "zk": { "url": "https://api.zeroknowledge.family/mcp" } }

The back of the box.

The whole act in a few calls. Tap a side to switch.

zeroknowledge
Series 1 · The vanishing act
The ghost holding an NVIDIA coin
18+AGES
4663 0ZK 2026
How to play
1// SIDE A · MCP (api.zeroknowledge.family/mcp)2timing_advice({ token: "NVDA", amount: "1" })3{ text: "Every note is exactly 1 NVDA", best: "now" }4 5relay_quote({ pool: "0x2dc6…58f5" })6{ fee: "0.0075 NVDA", refund: "0.00002 ETH" }7 8relay_withdraw({ pool, proof, recipient: fresh })9// the proof was made on your machine10{ status: "sent", tx: "0x…" }
Contents: 1 pool per token, 1 proof, 0 secrets sharedapi.zeroknowledge.family

MCP tools

Names use underscores. Nothing here can move coins without a proof, and proofs are made on your side with the SDK.

list_poolsevery pool: token, note sizes, crowd, 24 h in and out, best hour
get_poolone token: 30-day crowd, hourly heat, activity as the chain sees it
timing_advicecoded advice: does the size blend in, when to move
relay_quotethe relayer fee for one withdraw, and what the recipient gets
relay_withdrawpost a finished proof; the relayer pays the gas
relay_statusa relay job: pending, sent, done or failed
get_contractsverifier, hasher and every pool address

HTTP API

Base URL https://api.zeroknowledge.family. Open CORS, rate limited per IP.

GET/poolsevery token: note sizes, crowd, 24 h in and out, best hour
GET/pools/:tokenone token with 30-day crowd, heat and activity
GET/leaves/:poolall commitments, to build the Merkle tree yourself
GET/relay/quote?pool=relayer fee, gas refund, what the recipient gets
POST/relaypost a proof, the relayer pays the gas
GET/advice?token=&amount=when to move, from the real crowd
GET/contractsevery contract, same as the list below
GET/configfees, relayer, circuit files and their sha256
GET/llms.txtthe API for agents, in plain text
REQUEST
curl "https://api.zeroknowledge.family/advice?token=NVDA&amount=1"
RESPONSE 200
{
  "text": "Every note in this pool is exactly 1 NVDA,
           so yours looks like all of them.",
  "crowd": 0,
  "best": "any time"
}

One-file SDK

// npm i snarkjs circomlibjs
import * as snarkjs from "snarkjs"
import { makeDeposit, noteString, parseNote, proveWithdraw }
  from "https://api.zeroknowledge.family/sdk/zk.mjs"

const dep  = await makeDeposit()                 // on your machine
const note = noteString("NVDA", "1", 4663, dep)  // keep it safe
// approve 1.0025 NVDA, then pool.deposit(dep.commitment)

const { leaves } = await (await fetch(API + "/leaves/" + pool)).json()
const q = await (await fetch(API + "/relay/quote?pool=" + pool)).json()
const p = await proveWithdraw({ snarkjs, wasm, zkey, dep, leaves,
  recipient: fresh, relayer: q.relayer, fee: q.fee, refund: q.refund })
await fetch(API + "/relay", { method: "POST", body: JSON.stringify({ pool, ...p, recipient: fresh, relayer: q.relayer, fee: q.fee, refund: q.refund }) })

Contracts

Every contract the act runs on Robinhood Chain (4663): the verifier and hasher, then one pool per token and note size. A fork of the audited Tornado Cash design; trusted setup on the PSE powers of tau. Addresses appear here the moment they deploy.