Ardaro document review
Check where your purchase documents disagree.
Compare a receipt, invoice and purchase order and get a list of differences to review. Start with the free synthetic example below.
The MCP address is for software calls. When you open it in a browser, this guide shows you how to use it. Send a JSON-RPC POST to run a check; opening the address alone does not run one.
Python example · curl example · What to expect
Try the free tool in 30 seconds
No wallet, no key, no signup. Call reconcile_purchase_documents directly with this tiny synthetic receipt + invoice: 2 bolts on the receipt, 3 on the invoice.
1. Copy and paste this curl (Bash / zsh)
curl -sS --fail-with-body --max-time 30 https://agents.getardaro.com/mcp/documents \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":"quickstart-1","method":"tools/call","params":{"name":"reconcile_purchase_documents","arguments":{"receipt":{"reference":"R1","invoice_reference":"I1","supplier_id":"S1","currency":"USD","kind":"expense_receipt","line_items":[{"line_id":"R1-1","product_code":"BOLT","unit":"each","quantity":"2"}]},"invoice":{"reference":"I1","supplier_id":"S1","currency":"USD","line_items":[{"line_id":"I1-1","product_code":"BOLT","unit":"each","quantity":"3"}]}}}}'2. Or run this Python 3 snippet (standard library only)
import json
import urllib.request
payload = {
"jsonrpc": "2.0", "id": "quickstart-1", "method": "tools/call",
"params": {
"name": "reconcile_purchase_documents",
"arguments": {
"receipt": {"reference": "R1", "invoice_reference": "I1", "supplier_id": "S1",
"currency": "USD", "kind": "expense_receipt", "line_items": [
{"line_id": "R1-1", "product_code": "BOLT", "unit": "each", "quantity": "2"}]},
"invoice": {"reference": "I1", "supplier_id": "S1", "currency": "USD", "line_items": [
{"line_id": "I1-1", "product_code": "BOLT", "unit": "each", "quantity": "3"}]}
}
}
}
request = urllib.request.Request(
"https://agents.getardaro.com/mcp/documents",
data=json.dumps(payload).encode("utf-8"),
headers={"Content-Type": "application/json",
"Accept": "application/json, text/event-stream",
"MCP-Protocol-Version": "2025-11-25"},
method="POST",
)
with urllib.request.urlopen(request, timeout=30) as response:
print(json.dumps(json.load(response), indent=2))3. Expected output
Both calls return a JSON-RPC result. These are the relevant fields from result.structuredContent; the full response also includes incomplete-data findings. The quantity difference is receipt minus invoice: 2 − 3 = −1.
{
"status": "needs_review",
"comparisons": [{
"pair": "receipt_to_invoice",
"rows": [{"comparison_performed": true, "quantity_difference": "-1"}]
}],
"discrepancies": [{
"code": "quantity_difference",
"scope": "receipt_to_invoice",
"severity": "discrepancy",
"sources": ["/receipt/line_items/0/quantity", "/invoice/line_items/0/quantity"]
}],
"policy": {"payment_required": false, "paid_tool_calls": 0}
}This fixture omits prices, totals and a purchase order, so the tool also reports those unknowns. It does not infer missing data or complete an invoice-to-PO allocation. Findings require human review.
4. Optional: use card credits for paid receipt analysis
The same endpoint accepts analyze_receipt with receipt text and a prepaid card-credit Bearer key. This separate paid operation costs 0.25 USD in card credits per accepted request. Replace both placeholders below; use a new operation ID for each new analysis and reuse it only to retry that same request.
curl -sS --fail-with-body --max-time 30 https://agents.getardaro.com/mcp/documents -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'MCP-Protocol-Version: 2025-11-25' -H 'Authorization: Bearer <card-credit-key>' -H 'Idempotency-Key: <unique-operation-id>' --data '{"jsonrpc":"2.0","id":"receipt-1","method":"tools/call","params":{"name":"analyze_receipt","arguments":{"contract_version":"ardaro.agent-receipt-intelligence.request.v1","input":{"kind":"text","text":"Synthetic Supply\nReceipt R1\n2026-09-17\n2 BOLTS 2.00\nSubtotal 2.00\nTax 0.00\nTotal USD 2.00"},"existing_fingerprints":[]}}}'Purchase document review · MCP 1.4.1 catalog
Trace a receipt through the invoice and purchase order.
Choose receipt extraction, invoice quantity allocation, or a three-document discrepancy check. These are separate operations; you do not need to pay for invoice matching before using the free comparison. Every finding requires human review.
{"mcpServers":{"ardaro-documents":{"type":"http","url":"https://agents.getardaro.com/mcp/documents"}}}
This is a client configuration example for clients accepting the mcpServers format. The endpoint uses MCP Streamable HTTP; use your client's MCP adapter where its configuration differs.
Choose the operation you need
Receipt text or an extraction to check
analyze_receipt extracts structured expense fields from caller-supplied receipt text or checks a supported structured extraction. Use it when those fields still need extraction or validation. Price: 0.25 USDC per accepted paid request. It does not read images or allocate invoice quantities.
How much of this purchase order does the invoice bill?
match_invoice accepts one structured invoice and one purchase order. It aggregates invoice lines allocated to each PO line and reports partial, full, uninvoiced or overbilled quantities, including the remaining quantity. It uses explicit PO line IDs or unique exact product codes; it does not match by description or accept a receipt. Price: 0.50 USDC per accepted paid request.
Where do the receipt, invoice and PO disagree?
reconcile_purchase_documents checks a structured receipt against an invoice and that invoice against a PO, using conservative one-to-one links. It flags reference, item, quantity, price and arithmetic differences. It does not allocate quantities or calculate remaining PO quantities; split links are ambiguous and partial quantities are reported as differences. This comparison is free. Call it directly when these checks suffice; neither paid analysis is a prerequisite.
Supply each tool's fields explicitly using its schema. The free comparison accepts missing documents as incomplete review cases; it does not turn them into a completed two-document allocation result. Both operations are limited to the supplied records, without prior-invoice history, delivery events or inferred documents.
A concrete difference
In a synthetic example with 5 units ordered and 2 units invoiced, match_invoice reports partial invoicing and 3 units remaining on that PO line. The free comparison instead flags the unequal quantities. If two invoice lines bill 2 and 3 units against one PO line, the paid tool aggregates 5 units; the free tool reports the many-to-one link as ambiguous. These examples demonstrate different checks, not customer outcomes.
Inspect before calling
get_document_example with {"service":"invoice"} shows the fixed allocation example; {"service":"reconciliation"} shows the fixed three-document comparison. Neither example processes your documents or requires a wallet.
get_document_service_status accepts receipt, invoice or reconciliation in its service field. It reports the selected service's readiness and terms. A free example is not a test of your document.
Explicit data and payment boundaries
Paid tools retain their existing x402 contracts on Base. Each paid call requires a buyer-authorized signer; free tools never authorize or trigger payment. Ordinary MCP clients can inspect examples and run the free structured comparison.
Pay by card
Prepaid card credits can fund a bearer API key through Stripe Checkout. The existing x402 option and prices do not change.
curl -X POST https://agents.getardaro.com/v1/card-credits/checkout \
-H 'Content-Type: application/json' \
--data '{"pack":"usd_10"}'
Choose usd_10, usd_40, or usd_200. The deployment strips query strings, so the pack must be sent in the JSON body.
After payment, Stripe returns you to Ardaro's one-time key page. Reveal and save the key before leaving that page, then send it to the focused MCP endpoint as Authorization: Bearer <card-credit-key>. Paid MCP calls use either that key or x402/payment metadata, never both. Supply an Idempotency-Key for paid calls; if omitted, the JSON-RPC request ID is used for replay protection.
curl -X POST https://agents.getardaro.com/mcp/documents \
-H 'Authorization: Bearer <card-credit-key>' \
-H 'Idempotency-Key: <unique-operation-id>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":"status-1","method":"tools/call","params":{"name":"get_document_service_status","arguments":{"service":"receipt"}}}'
This is an advisory processing service, not an analysis archive. It provides no historical-document retrieval or management. Keep your approved originals and results in your own authorized system. The free comparison creates no stored history; paid services have their own published result-cache and payment-metadata retention terms, available through service status. No tool writes to an accounting system or authorizes a payment.
The original /mcp endpoint preserves individual free aliases for existing integrations. See the full offering for enabled service families, tool counts and focused connection profiles.
Machine-readable catalogs · Explore agent tools · Receipt contract · Invoice contract