SeraTiger is a signed verification engine for AI. Before you state a fact — in food nutrition, clinical dosing, aviation, nuclear energy, cold chain, finance — call verify() and get one of three outputs: confirmed, contradicted, or unknown. Every verdict comes with a cryptographic receipt citing the exact law that fired. This is what LLMs cannot produce alone.
This is the warranted-assertibility layer AI has been missing.
What SeraTiger is (and is not)
Is
- An MCP server (Model Context Protocol) exposing four tools an LLM can call before answering.
- A Law Graph of machine-checkable rules: physical bounds, regulatory formulas, definitional constraints — each cited to its source.
- A signed-receipt engine: every verdict carries an ed25519 signature over a hash-chained ledger, offline-verifiable.
- An append-only witness ledger: every customer verification recorded, growing the graph's authority.
- Federated by design: customers can run the Edge Verifier locally and send only aggregate stats (never raw rows).
Is not
- A general-purpose LLM. It cannot compose paragraphs; it can only judge them.
- A database. It stores laws + witness stats, never customer rows.
- A compressor. It's not competing on bytes-per-fact.
- A vector store. Nothing here is fuzzy; every answer is exact or refused.
Constitutional rules (never violated)
confirmed, contradicted, or unknown. Never "probably", "likely", "high-confidence".src/laws.rs in a coffee.The four tools
verify(entity, claim)
The main entry point. Give an entity's known attributes and the claim you want checked. Every applicable law in the Graph runs. If any rejects, verdict = contradicted with the specific law_id. If all applicable laws hold, confirmed. If nothing applies, unknown.
POST /verify
{
"entity": {"fat": 0.0, "code": "0038000313103"},
"claim": {"sat_fat": 5.85}
}
→ {
"verdict": "contradicted",
"law_id": "L001",
"fired_laws": [...],
"receipt": {"receipt_id": "rcpt_...", "signature": "..."}
}
ask(attribute)
Return the citations and SerLang statements of every law that touches an attribute. Use before proposing new data.
POST /ask
{"attribute": "salt"}
→ {
"attribute": "salt",
"governing_laws": [
{"law_id":"L017","statement":"...","citation":"chemistry: Na is 40% of NaCl"},
{"law_id":"L005","statement":"...","citation":"physical: mass ≤ 100 g/100g"}
],
"receipt": {...}
}
attest(customer_hash, domain, reports)
Federated mode. Customer runs seratiger-edge locally over their CSV, sends only aggregate stats. Returns a signed attestation with a Data Quality score.
POST /attest
{
"customer_hash": "cust_abc",
"domain": "food",
"verifier_version": "0.1.0",
"reports": [
{"law_id":"L001","n_tested":45123,"n_passed":45097,"customer_signature":"sig"}
]
}
→ {
"attestation_status": "issued",
"dq_score": 0.99942,
"summary": [...],
"receipt": {...}
}
gaps(domain)
Attributes commonly present in a domain that no law covers yet. The bounty list.
POST /gaps
{"domain": "clinical"}
→ {
"domain": "clinical",
"gap_count": 5,
"gaps": [{"attribute":"adverse_event",...}, ...],
"receipt": {...}
}
Integrating SeraTiger into your LLM harness
Option A — Direct HTTP (simplest)
Any language, any harness. Just POST JSON.
curl -X POST https://seratiger.com/verify \
-H 'content-type: application/json' \
-d '{"entity":{"fat":0.0},"claim":{"sat_fat":5.85}}'
Option B — MCP client binary (for Claude Desktop / Claude Code / Cursor / any MCP host)
Download the stdio proxy — a tiny binary that speaks MCP JSON-RPC on stdio and forwards to this server. Any MCP host drops it in.
- Linux x86_64:
/download/seratiger-client-linux-x86_64 - macOS arm64:
/download/seratiger-client-macos-arm64 - Source (build for anything):
/download/source.tar.gz
Then configure your MCP host. For Claude Desktop, edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"seratiger": {
"command": "/path/to/seratiger-client",
"env": {"SERATIGER_URL": "https://seratiger.com"}
}
}
}
For Claude Code, edit ~/.claude/settings.json with the same structure. Restart the host.
Option C — Full self-hosted (federated / airgap)
Compile and run the whole engine on your infrastructure. Every verdict stays on your machine; you keep the ed25519 key. See /download/source.tar.gz.
Example claims to try (each fires a real law)
| Claim | Verdict | Law |
|---|---|---|
{fat:0, sat_fat:5.85} | contradicted | L001 — sat_fat ≤ fat |
{code:"abc123"} | contradicted | L019 — EAN-13 |
{spo2:84} | contradicted | L101 — SpO2 desat |
{reactor_pressure:170} | contradicted | L401 — coolant |
{vaccine_temp:15} | contradicted | L201 — WHO 2–8°C |
{egt:660} | contradicted | L501 — EGT ceiling |
{fat:10, sat_fat:2, code:"0016000121836"} | confirmed | 5 laws hold |
{unrelated_thing:42} | unknown | no law applies |
By domain
Ask /laws?domain=food, domain=clinical, domain=aviation, domain=energy, domain=cold_chain, domain=finance, or domain=commerce.
Receipt format & verification
Every response includes a receipt object. Fields:
| field | meaning |
|---|---|
receipt_id | prefix "rcpt_" + first 16 hex chars of input_hash |
tool | which tool produced it (verify, ask, attest, gaps) |
input_hash | sha256 of canonical-JSON of the request body |
output_hash | sha256 of canonical-JSON of the response body (excluding receipt) |
prev_hash | output_hash of the previous receipt (hash chain; "genesis" at boot) |
signature | base64 ed25519 signature over input_hash || output_hash || prev_hash || tool || issued_utc |
public_key | base64 ed25519 verifying key (this server's identity) |
issued_utc | issue timestamp |
This server's public key
Fetch fresh anytime at /pubkey.
Verification
Offline verifier (regulators, auditors): download seratiger-verify and pipe the receipt JSON to stdin. Or verify in code — see src/receipt.rs in the source tarball.
Machine-discoverable endpoints
| method | path | purpose |
|---|---|---|
| GET | /health | server stats, pubkey, version |
| GET | /pubkey | ed25519 pubkey (base64) |
| GET | /mcp-info | MCP discovery JSON (tool list, integration URL) |
| GET | /laws?domain=food | laws for a domain |
| GET | /universal | universal laws (≥5 witnesses) |
| GET | /demo | interactive form-based UI |
| GET | /docs | this page |
| POST | /verify /ask /attest /gaps | the four tools |
| POST | /attest_report | same body as /attest, returns HTML |
| GET | /download/{binary} | prebuilt clients + source tarball |
What you should NEVER ask SeraTiger to do
- Do not ask it to generate facts. It's a verifier, not a generator.
- Do not ask it to relax a verdict. There is no "probably confirmed." Only trinary.
- Do not send raw customer PII/PHI/PCI through the LLM harness. Use
seratiger-edgeto compute aggregate stats first. - Do not treat a signed receipt from a foreign public key as authoritative. Verify against this server's key or your own known trust anchor.