catqualia-ledger-mcp
An MCP server that lets an agent check a claim against a real, published falsification ledger instead of guessing.
Agents are increasingly asked to verify their own output. Most have nowhere to verify it against. This server is a concrete answer: 16,217 claims that were actually run against ground truth, each recorded with the measurement that would have refuted it, the value measured, and the verdict — including 5,837 the system refuted against its own work.
What is in the ledger
Computed from the bundled ledger.jsonl.gz at call time, never hardcoded:
| parseable records | 16,217 |
| distinct checks | 323 |
| records carrying a pre-registered refutation threshold | 16,194 (99.9%) |
| verdicts REFUTED | 5,837 |
| verdicts CONFIRMED | 5,520 |
| verdicts UNVERIFIED | 4,815 |
| checks re-run at least twice | 276 |
| verdict transitions | 63 |
| hardening / loosening | 31 / 32 — net −1 |
The last line is the point. Re-run the checks and classify every verdict that
moved: CONFIRMED -> REFUTED after a check is hardened means the instrument had
been fooled and stopped being fooled (a hardening event); the reverse is a
loosening event. The signed net measures whether a system's ability to catch
its own false claims is improving or degrading.
It is currently −1: 31 hardening against 32 loosening. That is published because reporting only the hardening half would be a metric tuned to its owner — which is the exact failure the ledger exists to detect.
Corrected 2026-09-15. This table previously read 324 distinct checks, 277
re-run, 79 transitions and 38/38, net zero. The classifier keyed on the check name
with no guard, so every row carrying no check name fell into a single bucket and
consecutive verdicts inside it were differenced against each other: 16 of the 79
transitions were between unrelated claims. Schema v2 excludes those rows (25 of
them) and reports them instead of silently grouping them. The published checker
that reproduces this is ratchet.py, schema v2 — see
https://catqualia.com/corrections.
What is in the atlas corpus
Also bundled: 79 cross-domain atlases, read from their own citation metadata.
| atlases | 79 |
| Void Atlases — map what is absent | 29 |
| domain and biomedical | 45 |
| method | 4 |
| institutional audit | 1 |
An atlas locates the same structural mechanism independently in each domain and writes it up in that domain's own terminology, so a domain expert can check it rather than take it on metaphor. A Void Atlas maps what is absent: targets whose substrate is already characterised and measured and which the field nonetheless does not act on. The void is not in measurement; it is in application.
Each atlas carries its own DOI. Index: https://catqualia.com/atlases
Install
uvx catqualia-ledger-mcp # run without installing
# or
pip install catqualia-ledger-mcp
No dependencies. Python 3.9+. Implements MCP over stdio as newline-delimited JSON-RPC 2.0.
Configure
{
"mcpServers": {
"catqualia-ledger": {
"command": "uvx",
"args": ["catqualia-ledger-mcp"]
}
}
}
Tools
query_claim(query, verdict?, limit?)
Search the ledger. Returns the claim, its refutation threshold, the measured value, the method, and the verdict.
get_verdict(check?, claim?)
The recorded verdict for a named check. If a check ran more than once, all
verdicts are returned in ledger order — a change between them is a ratchet event.
A claim that is not in the ledger returns found: 0, never a plausible guess.
what_would_refute(query?, limit?)
The pre-registered threshold: the measurement that would have killed each claim, recorded before the outcome was known. Use it to test whether a claim is falsifiable at all, rather than whether it is currently believed.
verifier_drift_net()
The ratchet, recomputed from the ledger: re-runs, transitions, hardening, loosening, signed net, and the definition of what the number means.
citation_block(slug?)
BibTeX plus schema.org ScholarlyArticle JSON for a CatQualia publication, with
the DOI resolved, so citing agents cite correctly. Call with no slug to list what
is available.
Design rules this server follows
These are deliberate, and they are the reason it is worth trusting:
- Every number is computed from the bundled ledger at call time. Nothing is cached from a summary or a blog post.
UNVERIFIEDis returned asUNVERIFIED. It is never rounded up to a verdict, in either direction.- A miss returns a miss. If a claim is not in the ledger the server says so and explains that absence is not evidence either way. It does not infer.
- The net ratchet is returned signed, including when it is zero.
- A slug match is exact-first. Substring matching is not safe for a citation
tool:
"thesis"is a substring of"synthesis", which once returned the wrong DOI. Matching is exact → prefix → contains → word-boundary on title.
Related records
- Thesis — https://catqualia.com/thesis · DOI 10.5281/zenodo.22752082
- Definitions of the terminology — https://catqualia.com/definitions
- Full ledger — https://catqualia.com/ledger
- 135 dated defensive publications — DOI 10.5281/zenodo.22751107
Licence
Code: CatQualia Open-Or-Pay Licence (COPL) v1.0 — free for research,
individuals and academia with attribution; commercial use requires either opening
the derivative stack or a commercial waiver. See LICENSE.
Ledger data: CatQualia Structural Isomorphism License (CSIL) v3.0 — https://catqualia.com/licensing.
Citation
@software{catqualia_ledger_mcp,
title = {catqualia-ledger-mcp: an MCP server for the CatQualia falsification ledger},
author = {Betances, Christopher},
year = {2026},
url = {https://github.com/OpeningBlackBox/catqualia-ledger-mcp},
note = {16,217 pre-registered claims; verifier ratchet net zero}
}
Metadata
Release files for catqualia-ledger-mcp 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| catqualia_ledger_mcp-1.1.0.tar.gz | 1.9 MB | Without provenance | Details for catqualia_ledger_mcp-1.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| catqualia_ledger_mcp-1.1.0-py3-none-any.whl | Python 3 | none | any | Details for catqualia_ledger_mcp-1.1.0-py3-none-any.whl |
Total release size: 3.7 MB
Release files / catqualia_ledger_mcp-1.1.0.tar.gz
| Download URL | catqualia_ledger_mcp-1.1.0.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
407fdccac9e8520cf3a7598f0cd5bd372701b570cd887431755561006fc6ab02
|
|
BLAKE2b-256 checksum How to use checksums |
51c3c3bcb5f074603816cd5edbd88fd8eed27a54d79391420cf8ed656a4b5a98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Python-urllib/3.14
|
Release files / catqualia_ledger_mcp-1.1.0-py3-none-any.whl
| Download URL | catqualia_ledger_mcp-1.1.0-py3-none-any.whl |
|---|---|
| Size | 1.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ea48f40e4f03a402870ab32750d22adb619031cc5bc3239fcaaa99cdcb3b3b65
|
|
BLAKE2b-256 checksum How to use checksums |
a5bd57bb5f7fef95e5c19cc0b62895123be8fe5f88151ef96db922315ddc0045
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Python-urllib/3.14
|
Security for catqualia-ledger-mcp 1.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.