assurance-mcp
For an agent that retrieves before it answers
If your agent can list the folder it is reasoning about, you probably do not need this. We A/B'd exactly that inside Cursor and the run without these tools did better: it listed the directory, spotted the odd filename, and checked itself. That is the right behaviour and we are not going to pretend otherwise.
Where it earns its place is where the agent cannot see the whole set. It performed a retrieval and
holds k results, and nothing in those results says what the other set contained. It cannot list what
it was not given, and neither can a better model.
check_retrieval_coverage_tool answers that, in arithmetic, with no model involved.
Read-only by construction, inside folders you grant. No writes, no deletes, no network, and a model cannot widen what it may read. Proven by
test_the_server_never_writes: no tool opens a file for writing, and no requests, urllib,
shutil, os.remove, os.replace or symlink_to call exists in the package.
Install
python3 -m venv .venv && source .venv/bin/activate
pip install assurance-mcp
{
"mcpServers": {
"assurance": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "assurance_mcp.server", "--root", "/absolute/path/to/your/reports"]
}
}
}
--root is the boundary, and you set it — not the model. The folder tools read only inside the
folders named there (repeat --root for more than one, or set ASSURANCE_MCP_ROOTS). With none, they
refuse and say which line to add; the two set-coverage tools need no folder and work regardless. A
filesystem root (/, C:\) is refused even when granted. On Windows write the path as
"C:\\Users\\you\\reports".
The working directory is deliberately not a default: clients launch servers from wherever the client
started, which can be /. MCP roots are not used either — the 2026-07-28 specification deprecates
them in favour of exactly this, server configuration.
Cursor (~/.cursor/mcp.json), Claude Desktop, or any MCP client. Restart it, and you get four tools.
The one that fits your problem
check_set_coverage_tool takes two lists the agent already holds. No folder, no filesystem.
You: Before you answer, check what you retrieved against what the question spans.
Agent: check_set_coverage_tool(
expected = ["msa.md", "amendment-1.md", "amendment-2.md", "amendment-3.md"],
found = ["msa.md", "amendment-1.md", "globex/msa.md"],
scope = "documents this question spans",
where = "the retrieved set")
→ complete: false · read 2 of 4
"2 of 4 documents this question spans — not in the retrieved set:
amendment-2.md, amendment-3.md"
unexpected: ["globex/msa.md"]
Agent: I've read 2 of the 4 documents this question spans. Amendment 2 and 3 weren't retrieved and
the terms may have changed in them, so I shouldn't answer yet. I also pulled in a Globex
document, which I've discarded.
That's a sentence no agent produces on its own, and it's the one that stops a wrong answer.
Use it for: retrieved chunks vs. documents the question spans · files reviewed vs.
git diff --name-only · controls with evidence vs. controls in scope · partitions loaded vs.
declared · eval cases run vs. declared.
All four tools
| answers | needs a folder | |
|---|---|---|
check_set_coverage_tool |
did the run cover everything, over any two sets? | no |
check_coverage_tool |
which periods are in this folder, and which aren't? | yes |
check_staleness_tool |
do a document's figures still match a source you name? | yes |
list_dated_files_tool |
which periods does this folder hold? | yes |
check_coverage_tool handles monthly, quarterly, weekly, daily and numbered runs (INV-0001,
run_042), and returns the derivation with the ratio so the agent can surface a denominator you
can argue with. Works from a cold start: no state, no database, no key.
Honest limits
expectedis never inferred. A denominator the tool invents is one nobody can argue with- CSV and TSV only for profiling — no XLSX dependency here
- Staleness needs recorded facts, or the answer is
uncheckable— never silence - No cross-document inference. It produced 21 false positives on a real corpus, so it's refused
- You name the folder boundary in the config, not the model; paths can't escape it via
..or a symlink
Family
assurance-core — the pure arithmetic, zero dependencies · assurance-cli — the same checks as a command
Part of I-Ops, and developed in this repository. Apache-2.0.
Release files for assurance-mcp 0.5.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 | |
|---|---|---|---|
| assurance_mcp-0.5.0.tar.gz | 27.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| assurance_mcp-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.7 kB
Release files / assurance_mcp-0.5.0.tar.gz
| Download URL | assurance_mcp-0.5.0.tar.gz |
|---|---|
| Size | 27.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db2ad7af94b666f5e3584f5a1d1a352a9442683356d2916aea5c76b8ba33d175
|
|
BLAKE2b-256 checksum How to use checksums |
7f788ba63e18c652235dff8537945bbb9febbe1118b2707fe2e55c8022cb15da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 24, 2026.
Transparency logRelease files / assurance_mcp-0.5.0-py3-none-any.whl
| Download URL | assurance_mcp-0.5.0-py3-none-any.whl |
|---|---|
| Size | 17.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e57a1d96ba781c42ec272edcfa64931af0f373af01445215358681bea2edcaf7
|
|
BLAKE2b-256 checksum How to use checksums |
4f67c09eb3bdfc60803ae984748923a407aa2d18a62b7330ba1b09a4d450a7b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 24, 2026.
Transparency log