Skip to main content

assurance-mcp

PyPI Tests Python License

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

  • expected is 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

assurance_mcp-0.4.0.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

assurance_mcp-0.4.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file assurance_mcp-0.4.0.tar.gz.

File metadata

  • Download URL: assurance_mcp-0.4.0.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for assurance_mcp-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a77900709cd7773fd06364c21ab0bb61424d8b874aff1466ecf6c58402d6f7e5
MD5 068149d9f0213fec8c4258b9f902b28b
BLAKE2b-256 42ae6bb22f75b0957021b7774ec4a1b0f6764a3f409a0b5e74d80af1d5969bfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for assurance_mcp-0.4.0.tar.gz:

Publisher: publish.yml on i-ops-hq/assurance-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file assurance_mcp-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: assurance_mcp-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for assurance_mcp-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b593ad1b08980a1137e339aba55398c5e1b1bf859d516d8400b39d508546863c
MD5 963fa846dfe4d4ce868474bd962780b4
BLAKE2b-256 95875eecdbe20479276e5d144241f15071f9d2f602b4de479225f74dd1034316

See more details on using hashes here.

Provenance

The following attestation bundles were made for assurance_mcp-0.4.0-py3-none-any.whl:

Publisher: publish.yml on i-ops-hq/assurance-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.4.1

2 files

This release

0.4.0 This release

2 files

0.3.0

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

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