numproof
Integrates with LangChain as a tool and output checker for agents to verify numeric claims and reject false statements.
Integrates with OpenAI Agents SDK as an output guardrail that triggers on REFUTE verdicts to prevent incorrect numeric outputs.
Integrates with Pydantic AI as an output validator that raises a retry with counterexample when a numeric claim is refuted.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@numproofverify that a 50% loss needs a 100% gain to break even"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NumProof
The deterministic numeric truth layer for AI agents and spreadsheets.
Your agent writes "gross margin improved from 42.1% to 44.8%" or "the workbook is internally consistent" — NumProof tells you, deterministically, whether that number is VERIFY, REFUTE, or ABSTAIN, with a counterexample, cell/formula provenance, and a signed, machine-checkable audit bundle. It's exact arithmetic and symbolic math — not an LLM judging another LLM.
✅ Verify a single math/finance claim, or batch thousands in CI
✅ Audit
xlsx/csvrows: footing, cross-footing, balance-sheet ties, margins, formula cells — with provenance✅ Diff two report versions; evaluate covenant rule packs (DSCR, Debt/EBITDA, current ratio, …)
✅ Signed evidence bundle (JSON + HTML/PDF/ZIP) anyone can re-verify offline
✅ API · CLI · MCP server · optional x402 pay-per-call
This repo is the open-source client (SDK + MCP). The verification engine runs as a hosted service —
pip install numproof, point it at the API, done. (Same shape asstripe-python: the SDK is open, the engine is the service.)
Live demo (no key): https://numproof.com · Docs: https://numproof.com/docs
30-second start
pip install numprooffrom numproof import NumProof
np = NumProof.from_env() # NUMPROOF_API_KEY (get a free key: see below)
print(np.verify("120 + 90 + 340 + 15 == 565"))
# {'verdict': 'VERIFY', 'certificate': 'EXACT_ARITHMETIC', ...}
print(np.verify("a 50% loss needs a 100% gain to break even")) # VERIFY: (1-0.5)*(1+1.0)==1
print(np.verify("two 10% raises equal a 21% total increase")) # VERIFY
print(np.verify("operating margin is 18% when EBIT is 180 and revenue is 1000")) # VERIFYNo install? It's just HTTP:
curl -s https://numproof.com/demo -H 'Content-Type: application/json' \
-d '{"claim":"gross margin is 60% when gross profit is 600 and revenue is 1000"}'Free API key:
curl -s https://numproof.com/signup -X POST -H 'Content-Type: application/json' -d '{}'Related MCP server: agent-gate
Audit a spreadsheet (with provenance)
rows = [["Revenue", 1000], ["COGS", 400], ["Gross Profit", 600], ["Gross Margin", "60%"]]
print(np.audit_rows(rows)["verdict"]) # PASS (600/1000 == 60%, footing, ties, ...)
# covenant rule packs: DSCR, Debt/EBITDA, current ratio, custom thresholds
print(np.covenant_rows(
[["EBITDA", 500], ["Debt Service", 300], ["Debt", 1200]],
rule_pack="credit_covenants_basic",
)["verdict"])Every audit/diff/covenant result can be returned as a signed bundle + human-readable HTML/PDF
report (format="zip"). Recipients verify it without trusting you or NumProof:
curl -s https://numproof.com/audit/verify -H 'Content-Type: application/json' -d @bundle.json
# {"valid": true, "verdict": "PASS", "signer": "0x...", ...}Use it from an AI agent (MCP)
NumProof ships an MCP server so Claude / OpenAI-style agents can call it as a tool — gate every numeric claim before it reaches a user, report, or auditor.
python -m numproof.mcp{ "mcpServers": { "numproof": { "command": "python", "args": ["-m", "numproof.mcp"] } } }Or point any MCP client at the hosted descriptor: https://numproof.com/mcp.json.
See examples/ for runnable scripts (verify, audit, covenants, agent-gate, MCP).
Drop-in guardrails for agent frameworks
Verify the numbers your agent emits before it acts, in the framework you already use
(numproof/integrations/ — each lazily imports its framework, so the numproof client stays stdlib-only):
# OpenAI Agents SDK — output guardrail that trips on REFUTE
from agents import Agent
from numproof.integrations.openai_agents import numproof_output_guardrail
agent = Agent(name="...", instructions="...", output_guardrails=[numproof_output_guardrail()])OpenAI Agents SDK —
numproof.integrations.openai_agents(output guardrail / tripwire)Pydantic AI —
numproof.integrations.pydantic_ai(output validator; raisesModelRetrywith the counterexample so the model self-corrects)LangChain —
numproof.integrations.langchain(a NumProofTool+ an output checker)DeepEval (Confident AI) —
numproof.integrations.deepeval(a deterministicNumProofMetric: VERIFY → score 1.0, REFUTE → score 0.0 with the counterexample on.reason)Guardrails AI —
numproof.integrations.guardrails(a HubValidator: REFUTE →FailResultwith the counterexample, so youron_failaction — reask/fix/exception — fires)
VERIFY → pass · REFUTE → block/retry with the counterexample · ABSTAIN → pass-through (configurable). Runnable examples in examples/; install only the framework you use.
Independently re-checkable receipts (the part you can't fake)
Any verdict can be returned as a signed Verification Receipt — and you re-check it offline, trusting neither the transport nor NumProof:
pip install "numproof[verify]"
numproof-verify receipt.json --signer 0x<published-NumProof-signer>
# OK independently re-derived + signature validIt recovers the EIP-191 signer (tamper-evident) and, for value/agg/identity/sequence
claims, independently re-derives the verdict with stdlib Fraction + sympy. A tampered
field, a wrong signer, or a verdict that doesn't actually hold all fail loudly — even a receipt
NumProof itself mis-signed is caught by the re-derivation. An agent can recompute a number for
itself; it cannot issue an independent, signed attestation a second party will accept. That
independence — not the arithmetic — is the product. Format + spec: RECEIPT_FORMAT.md.
Why deterministic (and why it matters)
Generic "AI guardrails" use a model to grade a model — probabilistic, and itself can hallucinate.
NumProof recomputes the math exactly (rational arithmetic + symbolic identity checking) and
returns a reproducible verdict with a trace. When it can't prove something it says ABSTAIN
rather than guess. For finance, regulated, and agent workflows, "the number is provably right"
beats "another model thinks it looks right." Full table: comparison.md.
Pricing
Plan | Price | For |
Sandbox | $0 | web demo + free credits |
x402 PAYG | $0.005 / call | agent-to-tool, no subscription |
Builder | $29/mo | API + MCP + CLI, 2k credits |
Pro | $99/mo | batch, webhooks, CI, signed exports, 10k credits |
Finance Team | $299/mo | 5 seats, version diff, covenant packs, branded exports |
What's in this repo
The numproof Python SDK (NumProof client), the MCP server, and runnable examples — all thin
HTTP clients to the hosted API. MIT licensed. The verification engine, finance audit logic,
formal (Lean) proof tier, and signing are the hosted service and are not in this repo.
Found a wrong verdict? Open an issue with the exact claim — correctness is the whole product.
Available Tools
4 toolsaudit_rowsBInspect
Audit spreadsheet-like rows for footing, margins, formula cells, and cell provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action and focus areas but does not disclose whether the operation is read-only, what the return format is, whether rows are modified, or any other behavioral details. This leaves significant ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficient and front-loaded. However, the phrase 'spreadsheet-like' is slightly vague and could be more precise, though the structure itself is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, no output schema, and no annotations, the description is inadequate. It does not explain what the output looks like, how 'footing' or 'margins' are calculated, or any error behavior. The tool is underspecified for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage for the 'rows' parameter, and the description only mentions rows indirectly. It does not explain the expected structure of the array (e.g., objects, cell formats, required fields), so the agent cannot understand how to construct valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('audit') and resource ('spreadsheet-like rows') and names concrete audit dimensions (footing, margins, formula cells, cell provenance). This clearly distinguishes it from sibling tools like diff_rows and verify_claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for auditing row-level spreadsheet integrity but provides no explicit guidance on when to use it versus alternatives, nor any exclusions or prerequisites. Context is clear but not fully developed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
covenant_rulesBInspect
Check finance covenant rules (e.g. DSCR, Debt/EBITDA) over labeled rows; rule_pack selects a built-in pack such as credit_covenants_basic. Returns a signed covenant bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| rules | No | ||
| rule_pack | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses a return type ('Returns a signed covenant bundle') and hints at a read-only check, but it does not mention permissions, side effects, errors, or what 'signed' means. This is a moderate disclosure but has significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two crisp sentences, front-loaded with the primary purpose, and contains no extraneous text. Every sentence provides useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description gives a reasonable overview but leaves out critical details such as the format of labeled rows, the meaning of 'rules', and the exact behavior of the signed bundle. Given the sibling context (audit, verify, diff), the tool's niche is clear but operationally underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides meaning for 'rule_pack' ('selects a built-in pack such as credit_covenants_basic') and hints that 'rows' need labels, but it does not explain the 'rules' parameter at all. This leaves a key parameter without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('finance covenant rules'), with useful examples (DSCR, Debt/EBITDA). It is clear and distinct from sibling tools like 'audit_rows' or 'verify_claim', though it does not explicitly differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning 'over labeled rows' and that 'rule_pack selects a built-in pack', giving some context. However, it does not provide explicit when-to-use vs alternatives or exclusions, leaving the agent to infer the tool's specific role from its name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_rowsBInspect
Compare two report versions by numeric row labels with provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| rows_after | Yes | ||
| rows_before | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'provenance' as a hint of what the output may include, but it does not explain whether the operation is read-only, what the output structure looks like, or how differences are presented. This is insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently communicates the core purpose. Every word contributes value (compare, two report versions, numeric row labels, provenance), with no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, no annotations, and only minimal parameter descriptions. The description does not explain the return value, edge cases, or any operational context beyond 'compare'. For a diff tool, users would need to know the format of the diff result or any side effects, which are absent. The description is too sparse for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only array types for rows_before and rows_after (schema coverage 0%). The description adds that comparison is 'by numeric row labels', which gives a hint about the data structure, but it does not explain how these arrays should be formatted, what elements are expected, or how labels are used. The description does not sufficiently compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: comparing two report versions. It specifies the method ('by numeric row labels') and adds context ('with provenance'), distinguishing it from sibling tools like audit_rows or verify_claim. The verb 'compare' and resource 'report versions' make it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when comparing two versions), but it does not provide explicit when-to-use guidance or mention alternatives/exclusions. Sibling tools exist, but the description does not contrast against them, leaving usage context partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_claimAInspect
Exactly verify a math/finance claim -> VERIFY/REFUTE/ABSTAIN with certificate and counterexample.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the three possible outcomes and mentions that a certificate and counterexample accompany the result. However, it doesn't state whether any side effects exist or clarify the nature of the certificate, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the purpose and outcome. No filler words; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the core function and return categories, but lacks details on input formatting, the certificate's structure, and when ABSTAIN occurs. The absence of an output schema makes these omissions more significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter 'claim' with 0% coverage, so the description must compensate. The phrase 'math/finance claim' adds domain context to the parameter, but it doesn't specify the expected format or provide examples, leaving the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'verify' and names the resource as 'math/finance claim'. The arrow and outcome labels (VERIFY/REFUTE/ABSTAIN) clearly distinguish it from siblings like audit_rows or diff_rows, which address different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for verifying math/finance claims but offers no explicit guidance on when to choose this tool over siblings, no alternatives mentioned, and no exclusions. Context is present but shallow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.1.1- First observed
audit_rows - First observed
covenant_rules - First observed
diff_rows - First observed
verify_claim
TDQS
Each tool addresses a distinct aspect of numeric proof: auditing row-level consistency, verifying standalone claims, comparing versions, and checking covenant compliance. There is no noticeable overlap in purpose.
Three tools follow the verb_noun pattern (audit_rows, verify_claim, diff_rows), but covenant_rules is a noun_noun construction, breaking the pattern. Despite this, all names use consistent lowercase underscores, so the deviation is minor.
With four tools, the server is well-scoped for its specialized domain. Each tool covers a core operation without redundancy, and four is within the ideal range for a focused utility.
The tools cover the primary needs of numeric proof work: auditing rows, verifying claims, diffing versions, and evaluating covenant rules. No obvious missing operations for the stated purpose are apparent.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A paid remote MCP for ZeroLang, built to return verdicts, receipts, usage logs, and audit-ready JSON
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
MCP-native AI evaluation: rubric audits, eval suites, and proof reports for AI/LLM output.
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceCryptographic proof of every AI decision. An immutable, verifiable audit trail MCP server.1MIT
- AlicenseBqualityBmaintenanceAn MCP server that enforces fail-closed deterministic checks, independent refute-first review, and tamper-evident hash-chained receipts for AI agent outputs before claiming completion.43MIT
- AlicenseNot gradedqualityDmaintenanceMCP server providing deterministic accounting tools for AI agents, including bank statement parsing, document classification, money math, and webhook verification.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceMCP server for double-entry bookkeeping with idempotent writes, immutable entries, and audit trail. Enables trustworthy financial recording and verification through natural language.22MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/projecttron/numproof'
If you have feedback or need assistance with the MCP directory API, please join our Discord server