assurance-mcp
Give your agent a way to find out what it missed.
An agent can't audit its own reading. Ask one whether it saw everything and it says yes — from the inside, a complete answer and an answer built on two thirds of the data feel identical.
These tools answer it from the outside, in arithmetic, with no model involved.
Read-only by construction. No writes, no deletes, no network. 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"]
}
}
}
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
- The caller names the folder boundary; 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
Upstream is I-Ops; this repo is a publication, never a source. Apache-2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file assurance_mcp-0.2.1.tar.gz.
File metadata
- Download URL: assurance_mcp-0.2.1.tar.gz
- Upload date:
- Size: 14.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b604e6a4c50dea41046d0f7dfecb96b07b26ea91ddee8faafc679775cdbd2c8c
|
|
| MD5 |
99fdfc75ca2d41d62252f302bde8ddc5
|
|
| BLAKE2b-256 |
91cda396b0a6f532d60f94ce89ebc86df76ad4b5fc85327a6bb8c47a73772038
|
Provenance
The following attestation bundles were made for assurance_mcp-0.2.1.tar.gz:
Publisher:
publish.yml on i-ops-hq/assurance-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
assurance_mcp-0.2.1.tar.gz -
Subject digest:
b604e6a4c50dea41046d0f7dfecb96b07b26ea91ddee8faafc679775cdbd2c8c - Sigstore transparency entry: 2643598471
- Sigstore integration time:
-
Permalink:
i-ops-hq/assurance-mcp@2e6b1bc3ddc4c72ad739ab8d0e7c4d1278ed15fc -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/i-ops-hq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2e6b1bc3ddc4c72ad739ab8d0e7c4d1278ed15fc -
Trigger Event:
push
-
Statement type:
File details
Details for the file assurance_mcp-0.2.1-py3-none-any.whl.
File metadata
- Download URL: assurance_mcp-0.2.1-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db495f056b4f1513e21623014a40556533779e65b5ff05846845b0329fd236db
|
|
| MD5 |
b18021de1e7817ac79ea862e454a2389
|
|
| BLAKE2b-256 |
6b6e9bd9b161b7c397a5b6ba094964d7b0fa48fc6e420073728474210cb4be02
|
Provenance
The following attestation bundles were made for assurance_mcp-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on i-ops-hq/assurance-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
assurance_mcp-0.2.1-py3-none-any.whl -
Subject digest:
db495f056b4f1513e21623014a40556533779e65b5ff05846845b0329fd236db - Sigstore transparency entry: 2643598805
- Sigstore integration time:
-
Permalink:
i-ops-hq/assurance-mcp@2e6b1bc3ddc4c72ad739ab8d0e7c4d1278ed15fc -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/i-ops-hq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2e6b1bc3ddc4c72ad739ab8d0e7c4d1278ed15fc -
Trigger Event:
push
-
Statement type: