The problem

Freelancers and small studios agree on paid work in a meeting, such as "I'll send the deposit invoice today". Then the invoice goes out late or not at all, and nobody tracks whether it was paid.

What it does

MemoValet Pay turns that moment into a PayPal invoice, with a person in charge of the money step.

  1. You ask the assistant to bill what was agreed in the meeting.
  2. It proposes the invoice stored with that meeting. This is a draft, and nothing is created in PayPal.
  3. A card shows the payer, amount, due date and the line of the meeting it came from.
  4. You tap Approve and send. That approval covers this exact invoice and lasts 15 minutes.
  5. The assistant creates the invoice in the PayPal sandbox and sends it.
  6. It reads the status back from PayPal.
  7. If an invoice is overdue, it can draft a polite reminder that stays a draft. So far this has only been tested against a pretend PayPal.

How PayPal is used

PayPal is the heart of the project. MemoValet Pay uses PayPal's Invoicing API v2 in the sandbox to create a draft invoice, send it to a sandbox buyer and read its status. The app refuses to call PayPal if its settings point anywhere but the sandbox.

How AI is used

The assistant is a real MCP client. It connects to MemoValet Pay's own MCP server and gives its four tools to Gemini through function calling. The model works out which tool to use and explains what it did in plain words. The cards on the screen show what the tools returned, and the model is told to use the tools for every fact. If the AI is too busy, the screen says so and calls the tools itself for that step.

The human stays in charge of the money

The AI can propose, but it has no tool that approves money going out. The approval comes from the person's tap, as a signed token for one payer, currency, total, item list and due date. The model is never shown that token, and the server refuses to send without a valid one. When we told the assistant to skip the card and send straight away, it drafted the invoice and asked for approval instead. Each run also has its own invoice number, and PayPal refuses a number it has seen, so a retry or second tap can't bill the payer twice.

How we built it

We added this to MemoValet, an existing meeting assistant, using Next.js, TypeScript and the official MCP TypeScript SDK. Claude helped write the code. Adrian Kulatunga chose the idea and directed the work.

Challenges

Keeping the approval out of the model's reach took the most care, so the approval lives outside the tools the model can call. An independent review then found ways to send twice, which we fixed and checked against the PayPal sandbox. Gemini also sometimes answers that it is busy, so the app waits and repeats the model request. That retry never reruns a tool.

What is new since 1 October 2026

MemoValet existed before this hackathon as a meeting assistant. Everything PayPal is new: the PayPal client, the sandbox only check, the signed approval gate, the four MCP tools, the assistant that uses them, the approval screen and their tests.

What's next

Today it works from one fictional sample meeting, with the payment details stored with it, and it has no sign in. Next it would read a person's real meetings, work out the payment from what was said, and tie each approval to a signed in owner.

Built With

Share this project:

Updates

Submission history