Ardaro Purchase Document Review
by ashevilleislove · remote · no sign-in to list tools · v1.4.2 · published by GitHub user ashevilleislove
Receipt extraction, invoice-to-PO quantity allocation, and free three-document discrepancy checks.
5 tools: 1 do something that can't be undone, 1 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things1Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http ardaro-receipt-intelligence https://agents.getardaro.com/mcp/documentsFindings
Matches of fixed checks, with the text they matched.
The server marks "reconcile_purchase_documents" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "reconcile_purchase_documents" says "purchase": a word that usually means money moves, which cannot be taken back.
- Infoanalyze_receipt
The input schema at properties.input.oneOf[0].properties.text.description mentions "credentials".
What this check looks forMatched text
inputSchema.properties.input.oneOf[0].properties.text.description: "...characters. Exclude payment-card data, credentials, customer-record payloads, and financia..."
- Infomatch_invoice
The input schema at description mentions "credential".
What this check looks forMatched text
inputSchema.description: "...trol-bearing strings, sensitive card or credential data, and requests over 262144 UTF-8 JS..."
The input schema at description mentions "credentials".
What this check looks forMatched text
inputSchema.description: "...6608 UTF-8 JSON bytes. No images, URLs, credentials, account access, or paid tool calls. Mo..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
5 tools
Can't be undone 1Claude Code: ask
reconcile_purchase_documentsUSE THIS WHEN you have up to three documents (receipt, invoice, purchase order - any subset) and need a discrepancy list: reference, item, quantity, price, or arithmetic mismatches…2 findings
Why it is in this group
- The name "reconcile_purchase_documents" says "purchase": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The input schema at description mentions "credentials".
What this check looks forMatched text
inputSchema.description: "...6608 UTF-8 JSON bytes. No images, URLs, credentials, account access, or paid tool calls. Mo..."
- Warn
The server marks "reconcile_purchase_documents" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "reconcile_purchase_documents" says "purchase": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it USE THIS WHEN you have up to three documents (receipt, invoice, purchase order - any subset) and need a discrepancy list: reference, item, quantity, price, or arithmetic mismatches between them. This is the default choice for 'does this receipt match the invoice' or 'do these documents agree' questions. Links use explicit line references, exact product codes, or conservative normalized descriptions. DO NOT USE THIS if the actual question is a quantity-allocation question - how much of a PO has been invoiced, or resolving partial/split invoice lines against PO quantities. This tool does not allocate billed quantities or calculate remaining PO quantities: partial quantities are reported as plain differences, and any many-to-one (split) link is flagged ambiguous_many_to_one rather than resolved. For that, call match_invoice instead (paid, 0.50 USDC) - but you never need to call it before or after this tool; each works standalone. Free, no wallet authorization, no payment metadata accepted. Missing documents or fields are marked needs_review, never inferred. No OCR, retrieval, saved analyses, paid service calls, delivery verification, payment approval, or accounting writes. Human review required.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Changes things 1Claude Code: ask
match_invoiceUSE THIS WHEN the question is a quantity-allocation question: how much of this PO has been invoiced, whether an invoice is fully, partially, or over billed against the PO, or how m…1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The input schema at description mentions "credential".
What this check looks forMatched text
inputSchema.description: "...trol-bearing strings, sensitive card or credential data, and requests over 262144 UTF-8 JS..."
Description, as the server wrote it USE THIS WHEN the question is a quantity-allocation question: how much of this PO has been invoiced, whether an invoice is fully, partially, or over billed against the PO, or how much quantity remains. Aggregates split invoice lines against one PO line and returns a status per line - fully_invoiced, partially_invoiced, uninvoiced, or overbilled - plus remaining quantity. Matches by explicit PO line ID or a unique exact product code only, never by description. Inputs: one invoice plus one PO; it does not accept a receipt. DO NOT USE THIS to compare a receipt against an invoice, or for a general list of differences with no allocation question - call reconcile_purchase_documents instead; it is free and does not require calling this tool first or after. Paid: 0.50 USDC per accepted comparison, explicit buyer-authorized x402 payment. Call get_document_service_status with service='invoice' first to confirm current readiness and price. Advisory output only: human review required; no delivery verification, payment execution, prior-invoice history, or accounting writes.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 3Claude Code: allow
analyze_receiptExtract and validate structured expense data from receipt text or a provider-neutral receipt extraction.1 finding
Why it is in this group
- The name "analyze_receipt" says "analyze": a word for reading.
Findings
- Info
The input schema at properties.input.oneOf[0].properties.text.description mentions "credentials".
What this check looks forMatched text
inputSchema.properties.input.oneOf[0].properties.text.description: "...characters. Exclude payment-card data, credentials, customer-record payloads, and financia..."
Description, as the server wrote it Extract and validate structured expense data from receipt text or a provider-neutral receipt extraction. Use when an agent needs merchant, date, tax, total, line items, confidence, duplicate detection, and arithmetic validation before creating or reconciling an expense. The result is advisory and always requires human review. Paid tool: 0.25 USDC per accepted request. Requires an owner-authorized x402-capable client. Use get_document_example with service='receipt' for a fixed free example.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_document_exampleInspect a fixed synthetic request and expected result before integrating or paying.No findings
Why it is in this group
- The name "get_document_example" says "get": a word for reading.
Description, as the server wrote it Inspect a fixed synthetic request and expected result before integrating or paying. Select service from the enum; no caller document is accepted, processed or stored. Returns service and details containing that service's example. Free; no wallet authorization. Use get_document_service_status for current readiness, prices and retention instead.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_document_service_statusCheck the selected service's current runtime readiness, input limits, pricing and retention before use.No findings
Why it is in this group
- The name "get_document_service_status" says "get": a word for reading.
Description, as the server wrote it Check the selected service's current runtime readiness, input limits, pricing and retention before use. Returns service and details; ready=false means the underlying service is unavailable. Free cached runtime read; no external probe, payment, analysis or historical document retrieval. Use get_document_example for a fixed integration sample instead.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.4.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http ardaro-receipt-intelligence https://agents.getardaro.com/mcp/documentsRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__ardaro-receipt-intelligence__analyze_receipt",
"mcp__ardaro-receipt-intelligence__get_document_example",
"mcp__ardaro-receipt-intelligence__get_document_service_status"
],
"ask": [
"mcp__ardaro-receipt-intelligence__match_invoice",
"mcp__ardaro-receipt-intelligence__reconcile_purchase_documents"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as ardaro-receipt-intelligence. Review it before you use it.
