Skip to main content

evidence-ledger-mcp

PyPI Release Schema

Under active development. Both the schema and the server may change in breaking ways between versions until v1.0. Pin the version you use.

An MCP server through which agents keep an evidence ledger for the citations in a work: for each claim, the source that backs it, where in the source, a short quote and why the citation is needed. Co-authors, scripts or a second model can then check every citation against its source.

It is built for academics: authors and co-authors who write with LLMs and want every citation to stay checkable. The ledger format is an open schema, so a graduate school could require it for theses, and a journal could adopt it for submissions or build its own standard on it.

Supported schema: v0.4.0 · standalone schema repository (how schema versions are pinned).

The MCP server and its associated documentation use the MIT licence. The bundled schema uses CC BY 4.0, with attribution to Matthias Kloft. These licences do not cover ledger contents or third-party source material.

The evidence ledger schema

Every ledger this server writes follows the evidence ledger schema (JSON Schema, draft 2020-12), currently v0.4.0. The schema is the contract: any tool, script or person can read, validate and check a ledger with it, with or without this server. Its README documents the purpose, the file shapes, every record field, quote hashing, a minimal example and the sources the fields draw on. The server bundles a pinned copy in schema/ and reports the supported version through schema_info.

A ledger is a header (schema_version, work and optional notes) followed by records. Each record links one claim in the work to one source passage:

Field Required Content
id, claim_id yes Record and claim IDs; the server assigns them. Records about the same claim share a claim_id.
claim, claim_type, contestable yes The claim, its type (empirical, definition, method, background) and whether it needs full evidence; false needs a contestable_reason.
anchor yes Where the claim sits in the work: its exact text (with optional prefix/suffix) or a marker.
key yes The source's citation key, with doi, isbn or url, or a no_identifier_reason.
locator Where in the source: page, section, figure or table.
quote, quote_focus A short quote from the source, and the phrase within it that carries the claim; quote_hash is computed by the server.
relation, justification relation How the source bears on the claim (supports, partially_supports, background, method, contrasts) and why.
retrieved_via, provenance yes How the passage was found, and who assessed it (person or agent and model), when, and against which revision of the work.
withdrawn The reason a citation was withdrawn; records are never deleted.

A minimal record, as passed to add_record (the server adds the IDs, hash and date):

{
  "claim": "Retrieval practice improves long-term retention.",
  "claim_type": "empirical",
  "contestable": true,
  "anchor": {"exact": "testing improves later recall"},
  "key": "example2020",
  "doi": "10.1234/example",
  "locator": {"page": 12},
  "quote": "participants who were tested recalled more after one week",
  "relation": "supports",
  "justification": "Direct experimental evidence for the claim.",
  "retrieved_via": "pdf"
}

with provenance such as {"by_type": "agent", "by": "Claude Code", "model": "claude-opus-5-5"}. Ledgers are stored as JSON Lines; see docs/schema.md.

What it does

  • Write ledgers safely. Records are validated against the schema before they are appended. The server assigns record and claim IDs, computes quote hashes and dates the provenance instead of leaving them to the agent.
  • Keep the history. The server never deletes records; a withdrawn record keeps its reason.
  • Find gaps. Search by claim, source key or text, and list contestable claims still missing evidence.
  • Share without leaking sources. Exports and summaries come at three levels: full (private), masked (short excerpts) and locator (no quoted text). A publication check refuses to write a file that carries more source text than its level allows.
  • Read it as a report. A standalone HTML summary, grouped by claim, prints to PDF from a browser.
  • See the evidence in the work. The claims are marked in the work's own HTML and linked to their evidence, as end notes or in a side panel.
  • Check it against the work and its sources. Find anchors that no longer appear in the work, records assessed against another revision, quotes that the source text no longer holds, and citation keys missing from the bibliography. Source text can be passed in, or the server fetches it from public URLs (web pages, plain text and PDFs with a text layer).

Installation

Requires Python 3.11 or newer. The server speaks MCP over stdio. With uv, run the released version from PyPI:

uvx --from evidence-ledger-mcp==0.2.0 evidence-ledger-mcp

For example, to add it to Claude Code:

claude mcp add evidence-ledger -- uvx --from evidence-ledger-mcp==0.2.0 evidence-ledger-mcp

Other MCP clients take the same command and arguments. To run a source checkout instead, use uv sync, then configure the client to run uv with arguments run, --directory, the absolute path to the checkout, and evidence-ledger-mcp.

Pass absolute ledger paths to tools; relative paths resolve against the server's working directory.

Tools

Tool What it does
schema_info Reports the server version and the supported schema version.
create_ledger Creates a JSON Lines ledger with a header; work needs title and type.
add_record Validates and appends a record; takes the record and a separate provenance object and returns the stored record.
get_record Returns one record by its ID.
find_records Finds records by claim_id, source key or claim text, or contestable records with missing_evidence. Filters combine; withdrawn records are left out unless include_withdrawn is set.
validate_record Checks one record against the schema without writing it.
validate_ledger Checks a whole ledger and lists the problems found.
withdraw_record Marks a record withdrawn, with a reason, instead of deleting it.
export_ledger Writes the ledger as JSON or JSON Lines at a chosen level to a new file.
summarize_ledger Writes a standalone HTML summary grouped by claim to a new file.
embed_ledger Marks each claim in the work's rendered HTML and links it to its evidence, as end notes or in a side panel, in a new file.
check_ledger Reads the ledger and reports gaps, anchors missing from the work, records from another revision and quotes not found in source text you pass in or the server fetches from public URLs. Writes nothing.
resolve_links Matches each source to a PDF in your own folder, by DOI, ISBN or title (from your bibliography), whatever the files are named, finds the quoted passage by its hash and writes a link file named .private.json with the file and page.
relink_html Turns a summary or embedded HTML you received into a private copy (.private.html) whose evidence cards open your own PDFs at the passage or cited page.

Typical workflow

  1. create_ledger once per work, next to the manuscript or code.
  2. add_record whenever a source is cited, with the claim, its anchor, the source key, locator, quote, relation and justification. The server fills in IDs, the quote hash and the provenance date.
  3. find_records with missing_evidence and validate_ledger before submission, to find claims still lacking evidence.
  4. check_ledger with the rendered work, its bibliography and the sources (as text or public URLs), to catch anchors, keys and quotes that no longer match.
  5. export_ledger, summarize_ledger or embed_ledger at masked or locator level to share the ledger with co-authors, reviewers or a journal.

The tool reference covers export levels, masking, embedding and every check in detail.

Metadata

Release files for evidence-ledger-mcp 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for evidence-ledger-mcp 0.3.0
File Size Uploaded Provenance Actions
evidence_ledger_mcp-0.3.0.tar.gz 82.8 kB With provenance Details for evidence_ledger_mcp-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for evidence-ledger-mcp 0.3.0
File Interpreter ABI Platform Actions
evidence_ledger_mcp-0.3.0-py3-none-any.whl Python 3 none any Details for evidence_ledger_mcp-0.3.0-py3-none-any.whl

Total release size: 137.3 kB

Release files / evidence_ledger_mcp-0.3.0.tar.gz

Download URL evidence_ledger_mcp-0.3.0.tar.gz
Size 82.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b09b87ba444372cc9a673bfff5ddc2cadd052c694e9b351bad755a26cee85b1b
BLAKE2b-256 checksum
How to use checksums
f99da7560f8a2f078787c01399c0a06abd153255892cc1218924c9cb5cf3bf4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.

Transparency log

Release files / evidence_ledger_mcp-0.3.0-py3-none-any.whl

Download URL evidence_ledger_mcp-0.3.0-py3-none-any.whl
Size 54.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
52fc14affeceba70cfc36943cc2a69f1b29a3d90759df0f1aa705595b4a41860
BLAKE2b-256 checksum
How to use checksums
a1e4e75af1376cfa7ea63243174c740cdf4b7fa9d338aca9ebddeaa7708fff0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.

Transparency log

Security for evidence-ledger-mcp 0.3.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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for evidence_ledger_mcp-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.

Transparency log

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page