Live system demo - Project 1

PayFlow

Invoice verification that flags mismatched vendor bank details before payout.

Receives structured invoice data, runs automated vendor and bank verification, and blocks ledger posting until both checks pass.

Control. Nothing posts to the ledger without server-owned verification evidence from both checks - vendor match against the registry, and bank routing against the approved profile.

StackPython, FastMCP, Next.js, SSE

System brief

Challenge
A slightly altered routing number can send money to the wrong account before anyone catches it, especially when vendor checks are informal.
Solution
An invoice verification path that matches vendors to the registry, checks bank routing against approved profiles, and holds mismatched payouts for AP manager review.
Business impact
Unknown vendors and routing mismatches are held before money moves, with an explicit AP manager release or reject path.
Exception pathHold / review
Mismatch path
Unknown or low-confidence vendors fail the registry gate. Exact tax-ID match can allow name variation; a routing mismatch against the approved profile fails the bank check.
Payment held
A routing mismatch opens a persisted demo hold. Ops console status moves to held - nothing posts without fresh evidence.
Who reviews
AP manager reviews the hold in the ops console, with reason and audit trail on resolution.
How it is released
Release requires applying the approved profile routing, re-running both checks, and posting with fresh evidence. Reject closes the hold without posting.
Architecture and trade-offs
  1. 01BrowserInvoice scenario
  2. 02Next.js routeSSE stream
  3. 03Tool runtimeHosted MCP or embedded fallback
  4. 04ERP registryVendor + bank checks

Pass

Fresh evidence - ledger post

Both checks issue single-use evidence bound to the invoice data. Ledger posting rejects missing, stale, or replayed evidence.

Fail

Hold - AP manager review

Routing mismatch opens a hold. Release requires corrected approved routing, both checks re-run, then post. Reject closes without posting.

Browser posts an invoice to a Next.js route that streams over SSE. Tools run on hosted FastMCP when available, otherwise the embedded fallback. The ERP registry runs vendor and bank checks. Pass posts to the ledger with verification evidence. Fail opens a hold for AP manager review, who can apply corrected approved routing and re-check, or reject.

Each step streams into the ops console over SSE. Hosted FastMCP is preferred when reachable; otherwise the embedded tool runtime enforces the same evidence gate. Pass posts; fail opens an AP manager hold.

Trade-offs

  • Demo/session hold storage is in-memory - fine for a portfolio run, not durable across serverless cold starts.
  • Deterministic tool sequence over an open-ended LLM agent - clearer demos and safer money decisions.
  • Embedded MCP fallback when HTTP MCP is down keeps the public demo accurate; local FastMCP is the fuller integration story.

Live system demo

1 Choose a scenario · 2 Run the system · 3 Inspect how it works

Operations console

Ready for invoices
0 events

Incoming invoice

Vendor
Acme Global Enterprise Inc.
Tax ID
XX-XXX4910
Routing
021000021
Amount
$14,500

Master vendor profile

Official name
Waiting for check...
Approved routing
-
Bank check
Pending
Name similarity - waiting for match0%

Pick an invoice on the left and hit Run invoice check to fill the match score and security banners.