Documentation

Clink Forge sells machine-purchasable government and civic data over the x402 payment protocol: no account, no API key, no subscription. An agent asks, gets a price, pays a fraction of a cent in USDC on Base, and receives data with a cryptographic provenance chain and a verifiable Ed25519 attestation. Two ways in: MCP for agents, plain HTTP for everything else.

01Connect over MCP

MCP endpoint · streamable HTTP, stateless https://api.clinkforge.com/mcp

The curated products are individual MCP tools. Two more reach the rest of the catalog: search_catalog (free keyword search) and query_product (buy any product by slug). Listed in the official MCP Registry as com.clinkforge/clink-forge; in Claude, add it as a custom connector with the URL above.

Payment follows the standard x402 MCP transport, so an x402-aware MCP client pays on its own:

  1. Call a paid tool. The result comes back isError: true carrying the x402 PaymentRequired object. That is a free price quote — you are never charged for asking.
  2. The client signs a payment for those requirements (an EIP-3009 transferWithAuthorization for USDC on Base) and retries the call with it in _meta["x402/payment"].
  3. Settlement happens on-chain; the result is the data, its provenance chain and the attestation, with the settlement in _meta["x402/payment-response"].
// npm install @x402/mcp @x402/evm @modelcontextprotocol/sdk viem
const client = createx402MCPClient({
  name: "my-agent", version: "1.0.0",
  schemes: [{ network: "eip155:*", client: new ExactEvmScheme(account) }],
});
await client.connect(new StreamableHTTPClientTransport(
  new URL("https://api.clinkforge.com/mcp")));
const result = await client.callTool("kev_status_by_cve",
                                     { id: "CVE-2021-44228" });

The full example, with a per-call spending cap, is mcp-agent.mjs in the quickstart repo. Free MCP methods (initialize, tools/list, ping) and search_catalog never require payment. The earlier payment tool argument is still accepted.

02Pay per call over HTTP

Every product lives at GET /v1/p/<slug>. An unpaid request returns 402 Payment Required with the terms in both protocol generations: the x402 v1 JSON body and the canonical v2 PAYMENT-REQUIRED header.

# 1 — ask the price (free)
curl -i "https://api.clinkforge.com/v1/p/kev-status-by-cve?id=CVE-2021-44228"
# → 402 with accepts[]: scheme "exact", USDC on Base, amount, payTo

# 2 — sign those requirements with an x402 client, then retry
curl -H "X-PAYMENT: <signed>" \
  "https://api.clinkforge.com/v1/p/kev-status-by-cve?id=CVE-2021-44228"
# → 200 with the data; X-PAYMENT-RESPONSE carries the settlement

Skip the plumbing — official clients, ~15 lines

The official x402 client libraries handle the 402 handshake, EIP-3009 signing, and retry automatically. Both examples below are tested against this production API and live in the quickstart repo — you need only a wallet key with a little USDC on Base.

# Python — pip install "x402[httpx,evm]"
signer = EthAccountSigner(Account.from_key(os.environ["WALLET_PRIVATE_KEY"]))
client = x402Client()
client.register("eip155:*", ExactEvmScheme(signer=signer))
async with x402HttpxClient(client) as http:
    r = await http.get("https://api.clinkforge.com/v1/p/kev-status-by-cve",
                       params={"id": "CVE-2021-44228"})
// JavaScript — npm install x402-fetch viem
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY);
const wallet = createWalletClient({ account, chain: base, transport: http() });
const fetchWithPay = wrapFetchWithPayment(fetch, wallet);
const r = await fetchWithPay(
  "https://api.clinkforge.com/v1/p/kev-status-by-cve?id=CVE-2021-44228");

The paid response envelope:

{
  "product": "kev-status-by-cve",  "product_version": 1,
  "row_count": 1,
  "data": [{ "...": "...", "_record_id": "CVE-2021-44228" }],
  "provenance": [{ "authority": "CISA", "source_url": "...",
                   "observed_at": "...", "hash": "sha256..." }],
  "attestation": { "signing_key_id": "...", "signature": "base64...", "...": "..." },
  "payment_receipt": { "settlement_ref": "0x...", "amount_usd": 0.001 }
}

Fair-failure rules, enforced in code: a wrong parameter returns 422 before any money moves; a paid call with no parameters at all is served the product's documented example and says so in params_defaulted_to_example; if fulfillment fails after you paid, you receive a long-lived replay voucher instead of losing the payment; a transient failure retries free with the short-lived x-paid-token. An unhealthy product refuses to sell — 503, never a payment challenge.

03Verify what you bought

Every paid response is signed. Verification is free and needs no account:

04Catalog & discovery

SurfaceWhat it is
/llms.txt The whole catalog in plain text — products, parameters, prices.
/v1/meta/products Catalog as JSON with live health per product.
/v1/meta/openapi.json OpenAPI description of every endpoint and schema.
/.well-known/x402.json x402 discovery manifest (v2 payment requirements per service).

Prices are per call, typically $0.001–$0.05. Sources are official government and public-data feeds (CISA, FDA, FDIC, Treasury, NWS, Census, BEA, EIA, HUD, NOAA, Companies House and more), ingested on fixed cadences with append-only bitemporal storage — as_of reads and reproducible replays included.

05Support

Questions, keys, or a dataset you wish we sold: admin@clinkforge.com. Service status is visible live on every discovery surface; unhealthy products always fail closed.