catqualia-ledger-mcp
Official# 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 | **324** |
| 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 | **277** |
| verdict transitions | **79** |
| hardening / loosening | **38 / 38 — net 0** |
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 **zero**. That is published because reporting only the +38 half
would be a metric tuned to its owner — which is the exact failure the ledger
exists to detect.
## Install
```bash
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
```json
{
"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.
- **`UNVERIFIED` is returned as `UNVERIFIED`.** 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](https://doi.org/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](https://doi.org/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
```bibtex
@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}
}
```
TDQS
Scored across 5 tools
The tools are mostly distinct: query_claim returns full claim records, get_verdict focuses on verdict retrieval, what_would_refute provides thresholds, verifier_drift_net measures transitions, and citation_block handles citations. There is some overlap between query_claim and get_verdict in searching by phrase, but the purposes are clearly different enough to avoid significant confusion.
Naming conventions are inconsistent. query_claim and get_verdict follow a verb_noun pattern, but what_would_refute is a question phrase, verifier_drift_net is a noun compound, and citation_block is also noun_noun. This mixed style makes it harder to predict tool names and reduces coherence.
With only 5 tools, the server is tightly scoped to its ledger domain. Each tool covers a distinct need—searching, verdicts, thresholds, drift analysis, and citations—without redundancy or bloat.
The tool surface covers the core operations for querying and analyzing the ledger: search, verdict retrieval, threshold lookup, drift measurement, and citation generation. Minor gaps exist, such as no explicit tool to list all claims or add new ones, but the apparent read-only purpose is well-served.