
Expense
io.github.assafPublished by GitHub account assafv1.0.0Updated Oct 25, 2026
Receipt tracker with no friction: receipts arrive by email and file themselves
Overview
Remote MCP server for a receipt-tracking app that lets an assistant capture receipts, log drives, query spending and manage expense reports.
- What you can do
- Capture receipts from photos, screenshots, PDFs, the clipboard or a connected mailbox, read for merchant, amount and category
- Log drives and price them at the IRS rate for the trip date and type
- Answer questions about your spending
- Manage reports and export a year as a PDF per report or one ZIP of everything
- Match a bank statement to expenses
- When to use it
- Useful if you track personal or small-business expenses and want an assistant to file receipts, log mileage, answer spending questions or reconcile a bank statement without manual data entry. Not intended for corporate expense policy, approvals or double-entry bookkeeping.
- Requirements
- A remote endpoint at expense.labnotes.org/mcp; no API keys. OAuth sign-in with an account (email login), where you click Allow. An account can be joined with an 8-character invite code from Settings.
Installation
In SourceWeft
- Open Expense in the dashboard and add it to a workspace.
- Connect the required credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.assaf%2Fexpense/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"mcpServers": {
"expense": {
"type": "http",
"url": "https://expense.labnotes.org/mcp"
}
}
}README
Expense
Expense is a seamless receipt tracking solution: receipts are automatically sent via email, mileage uses the tax rate provided by the IRS, and a smart AI assistant does your data entry so that you can forget about the process altogether.
PRODUCT.md is the map: what the product is, how it works, the pages a person uses, the architecture and data model, and the vocabulary. This file is the front door; that one is the orientation.
Screenshots
[Expense list: reports, receipts, and a mileage route]
[Receipt editor with the receipt image]
What it does
Receipts come in from a photo, a screenshot, a PDF, the clipboard, a connected Fastmail or Gmail mailbox, or an MCP assistant; each one is read for merchant, amount and category, filed under an IRS Schedule C line, and kept with its image. Drives are mapped and priced at the IRS rate for the trip date and type. The year leaves as a PDF per report, with the receipts attached, or as one ZIP of everything. A warranty document dropped on the warranties page becomes a record you can find by how soon coverage ends. Installed from the Home Screen on a phone, it opens on your expense list.
Free, no card, no ads, no paid tier. Not built for corporate expense policy, approvals, or double-entry bookkeeping. The full tour, with the pages and the rules behind each one, is in PRODUCT.md.
AI assistants (MCP)
The app speaks the Model Context Protocol at https://expense.labnotes.org/mcp.
An assistant connects with OAuth — you sign in and click Allow — so there are no
API keys. A connected assistant can capture a receipt, log a drive, answer
questions about your spending, manage reports, and match a bank statement.
The reference is docs/mcp.md; the tools are listed in PRODUCT.md.
Accounts
Email is the login name, hashed with scrypt, with a signed-cookie session. Everything belongs to an account; an account has several users; accounts are fully isolated from each other. Sign up for a new one, or join an existing one with the 8-character invite code in Settings. Image keys are namespaced per account, so two accounts can never collide. More detail in PRODUCT.md and docs/accounts.md.
How it is built
One app, one Postgres database, no monorepo. React Router v8 in framework mode
(SSR), where the URL tree is the filesystem; Prisma 8 contract-first, so
prisma/contract.prisma is the schema and there are no migration files; images
stored as bytes in Postgres rather than in object storage. Deployed on Vercel
plus Supabase Postgres, where a push to main deploys. The diagrams are in
PRODUCT.md.
Run it locally with pnpm dev; the environment variables, the connection
poolers and the deploy path are in docs/operations.md and
docs/deploy.md.
Documentation
Source: README.md at commit cf18ba6
Tools
0Version history
1- v1.0.0LatestSep 16, 2026
Score
75% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.