Qiniso

The deterministic fact-verification layer for AI agents.

Agents confidently emit IBANs, phone numbers, domains, VAT numbers and crypto addresses that are subtly — and silently — wrong. Qiniso checks them against checksums and curated authoritative data, so a wrong answer is caught, not trusted. "Qiniso" means "truth" in Zulu.

Why it exists

Security and structure guardrails check whether an answer is safe or well-formed. Hallucination guardrails ask another LLM whether it's faithful to the prompt. None of them check whether a structured fact is actually correct against the real world — because that needs deterministic computation or curated data, not another model's opinion. That's Qiniso.

~91%of arbitrary IBAN/VIN-style identifiers a frontier LLM validates wrong, cold and silently. Qiniso: 0%.
33deterministic checks across 8 domains, one endpoint.
0API keys, secrets or user data required — stateless, nothing to authorize.

It verifies facts you give it; it is not a live-data provider and never asks for your credentials.

What it verifies

Identifiers

IBAN, payment card (Luhn + brand), ISBN-13, VIN.

Web / network

TLD & domain (IANA root zone), IP, UUID, URL, email.

Finance

ISIN, CUSIP, SEDOL, LEI, US ABA routing.

Crypto

Ethereum (EIP-55) & Bitcoin (Base58Check / Bech32) addresses.

National & tax IDs

Brazil CPF/CNPJ, South Africa ID, Spain DNI/NIE, India Aadhaar, EU/UK VAT.

Academic

ISBN-10, ISSN, ORCID.

Locale

Phone (global), date parsing, currency, holidays (~200 countries), UK VAT-by-date.

Addresses

UK/US address parsing into structured fields.

Add it to Claude

Settings → Connectors → Add custom connector, and paste the URL. No login, no key:

https://qiniso.qinisolabs.workers.dev/mcp

Or import it as a library

Every check is also a typed function — no MCP required:

npm i @qinisolabs/qiniso

import { validateIban, validateVat } from "@qinisolabs/qiniso";
validateIban("GB82 WEST 1234 5698 7654 32"); // { valid: true, country: "United Kingdom", ... }