ExpenseBot

We Built an MCP Server for ExpenseBot — Now Your AI Can Manage Your Expenses

Hey Claude, scan my Gmail for receipts and create a Q1 expense report.

We've shipped two MCP (Model Context Protocol) servers so Claude Desktop, Cursor, ChatGPT, and any MCP-compatible AI assistant can search expenses, submit receipts, scan Gmail, and run analytics directly against your real ExpenseBot account.

Below: what shipped, the demo that motivated it, representative capabilities, the current connection paths, and the privacy answers we expect you'll ask.

Skip the read — go to the install page.

The /mcp landing page has the JSON config snippet, both packages, and a one-click token generator.

Install the ExpenseBot MCP →

The 30-Second Demo

Here's the scenario that pushed us to ship this. Open Claude Desktop. Type:

"Hey Claude, scan my Gmail for receipts from January and create a Q1 expense report. Share it with my accountant when it's done."

Claude calls scan_gmail with a January date range. ExpenseBot processes whatever new receipts it finds. Claude calls create_report with type "schedule-c" and dates Jan 1 through Mar 31. Then share_report with your accountant's email. Claude reports back with totals by category and a link to the Google Sheet.

No tab switching, no upload dialog, no export step. Expenses land in the spreadsheet in about one to three minutes.

Another one we keep using: "Find every Uber receipt I expensed last quarter" — Claude searches, returns the rows, and offers to dump them into a vendor-specific report. The thing your accountant or freelancer self spends an hour on becomes a one-line ask.

What MCP Is (in Plain English)

Model Context Protocol is a standard for connecting AI assistants to external tools and data. Picture it as a universal adapter: instead of every AI app building custom integrations for every other app, MCP defines a shared protocol both sides speak.

An MCP server exposes tools (functions the AI can call). An MCP client (Claude Desktop, Cursor, ChatGPT, agent frameworks) connects to one or more servers and gives its AI the tool catalog. The user asks something in English, the model picks the right tool, the server runs it, the result comes back into context.

Anthropic released MCP as an open standard in late 2024. Anyone can build an MCP server. ExpenseBot just shipped two.

The Two ExpenseBot MCP Servers

We split this into two npm packages because the audience is different:

  • @expensebot/mcp-server — read-only, no authentication, public docs and knowledge base only. Use this if you want Claude to answer questions about how ExpenseBot works, what's deductible on Schedule C, or how T2125 line items map. No account required.
  • @expensebot/mcp-server-auth — authenticated, full access to your ExpenseBot account via a personal access token. This is the one that searches your expenses, submits receipts, runs Gmail scans, and creates reports.

Both are published on npm and listed on the MCP Registry as io.github.TotesMagotes/mcp-server and io.github.TotesMagotes/mcp-server-auth (publishedAt 2026-04-30). Install them like any npm package — Claude Desktop runs them via npx so you don't install anything globally.

# Read-only docs server (no token needed)
npx -y @expensebot/mcp-server

# Authenticated local server (provide EXPENSEBOT_TOKEN in the client's environment)
npx -y @expensebot/mcp-server-auth

Representative Tools (With Examples)

ExpenseBot's tool catalog evolves as workflows are added. The examples below show the kinds of work your assistant can handle; the current exact catalog is listed on the MCP setup page.

Capture (5 tools)

  • submit_receipt — "Here's a photo of last night's client dinner — log it"
  • add_cash_expense — "Add $42 in parking from yesterday, paid cash"
  • add_mileage_entry — "Log 38 miles to Friday's client meeting at the standard rate"
  • add_income — "Log $4,200 retainer received from Acme today"
  • parse_expense — "Parse this email body into an expense row"

Gmail (2 tools)

  • process_gmail_receipts — "Process the receipts I labeled in Gmail"
  • scan_gmail — "Scan my inbox for January receipts" — pairs naturally with the Gmail receipt scanner flow
  • search_expenses — "Show me everything from Home Depot in March"
  • get_expense_by_id — "Open the expense row for that $312 B&H order"
  • get_recent_activity — "What's been added to my sheet in the last week?"
  • trace_document — "Why didn't my Blue Rocket invoice show up?"
  • list_categories — "What expense categories am I using right now?"
  • list_income_categories — "Which income categories are set up?"
  • list_tags — "Which tags do I have set up for clients?"
  • search_knowledge — "How does ExpenseBot handle T2125 line item 9281?"

Reports (5 tools)

  • create_report — "Build me a Schedule C summary for 2026 so far"
  • list_reports — "What reports do I already have?"
  • get_report_details — "Open the Q1 mileage report and show totals"
  • share_report — "Share that report with my accountant at jane@cpafirm.com"
  • export_report — "Give me a PDF of the 2026 report" — returns a short-lived PDF link plus the in-app report, where CSV, XLSX and the receipt ZIP live

Income & P&L (4 tools)

  • get_income_summary — "How much did I invoice this quarter?"
  • get_pnl — "Show my profit and loss for 2026 year to date"
  • get_per_tag_pnl — "Break profit down by client tag"
  • get_mileage_summary — "Total business miles this year and the deduction"

Analytics & Compliance (5 tools)

  • get_spending_summary — "What did I spend on travel last quarter?"
  • get_deep_analytics — "Which categories grew the most year over year?"
  • check_compliance — "Is my Q1 data audit-ready? Anything missing?"
  • fix_compliance — "Fix the missing categories on those rows"
  • check_tax_deductibility — "Walk me through which of these expenses are deductible"

Accounting Handoff (4 tools)

  • send_report_to_accounting — "Push the Q1 report to Zoho Books" — a two-step call: it proposes the posting, then posts only what you confirm. For QuickBooks Online, Xero, Wave and FreeAgent the assistant instead hands you an exact-report deep link, opening that report on the destination you named so you can confirm the mappings and send it yourself
  • get_accounting_integration_status — "Is my Xero connection still healthy?" — covers QuickBooks Online, Xero, Wave, FreeAgent and Zoho Books
  • get_accounting_push_status — "Did that push actually land, and what failed?"
  • request_accounting_integration — "Ask for support for the package I use"

Client Billing & Advances (6 tools)

  • prepare_client_invoice — "What would I bill Acme for last month?" — previews exact totals and reserves the invoice number without creating anything
  • create_client_invoice — creates the invoice only after you explicitly confirm the preview
  • get_client_invoice — "Show me invoice 1042"
  • list_client_invoices — "Which client invoices are still open?"
  • mark_client_invoice_paid — "Mark invoice 1042 paid on the 20th"
  • get_client_advance_balances — "How much of Acme's advance is left?"

Billing is deliberately two-phase: the assistant prepares and shows you the numbers, and nothing is created until you confirm. It never emails an invoice to your client — generating the document and sending it stay separate decisions.

Corrections & Grouping (5 tools)

  • update_expense — "Change that row's category to Meals"
  • correct_expenses — "Fix the merchant on those three rows"
  • group_expenses — "Group my July Acme travel under Client Acme"
  • get_expense_splits — "How was that dinner split?"
  • get_credits_refunds — "Show refunds and card credits this quarter"

Planning & Review (4 tools)

  • get_monthly_books_review — "Walk me through last month's books"
  • whatif_tax_setaside — "How much should I set aside for tax?"
  • whatif_client — "What happens to my year if I land this client?"
  • whatif_afford — "Can I afford this equipment purchase?"

Ready to wire it up?

The /mcp landing page has copy-paste configs for Claude Desktop and a token generator.

Get my MCP token →

Choose Your Connection

Use the connection method that matches where you are chatting. The live setup chooser keeps the current steps in one place.

ChatGPT or Claude.

Find ExpenseBot in the assistant's connector directory, click Connect, then complete browser sign-in and approve access. Hosted connectors use OAuth; there is no token to copy.

Custom remote agent.

Add https://mcp.expensebot.ai/mcp as a remote MCP server. The client should detect OAuth and open the ExpenseBot sign-in flow. Never paste a personal token into an AI conversation.

Local stdio client.

Generate a revocable token from ExpenseBot's signed-in AI Assistant Tokens screen, then store it as EXPENSEBOT_TOKEN in the client's secret or environment settings. The command itself contains no secret:

{
  "mcpServers": {
    "expensebot": {
      "command": "npx",
      "args": ["-y", "@expensebot/mcp-server-auth"],
      "env": { "EXPENSEBOT_TOKEN": "<stored securely by the client>" }
    }
  }
}

Restart the local client and ask: "Use ExpenseBot to summarize my March spending."For client-specific config locations and troubleshooting, use the setup chooser rather than copying this historical launch article.

Privacy & Security FAQ

What does Anthropic see?

Only the data Claude explicitly pulls in to answer your question. If you ask "summarize my Q1 spending," Claude calls get_spending_summary, gets back aggregate totals, and uses those to write the answer — that aggregate is what enters Claude's context. Anthropic doesn't get bulk access to your sheet. You can audit every tool call in your ExpenseBot Settings → AI Assistant Tokens log.

What happens if my token leaks?

Revoke it in Settings → AI Assistant Tokens. The MCP server validates every request against the active token list, so a revoked token stops working instantly. Rotation is encouraged — create a new token, update your Claude Desktop config, revoke the old.

Where is my data stored?

Same place it always was: your Google Sheet in your Google Drive. The MCP server is a thin authenticated layer that reads that sheet on demand and writes new rows when you ask for a capture action. No copy of your data lives in an ExpenseBot-owned database for AI consumption.

Are tokens encrypted?

Tokens are hashed with SHA-256 before storage. Even ExpenseBot staff can't read the original value — we can only verify a hash match. Every call is audit-logged in Firestore against the token ID with timestamp, tool name, and result status, so you have a record of exactly what your AI assistant did with your data.

What's Next on the Roadmap

Things we've heard from early users that we're considering:

  • Voice triggers. "Hey Claude, log this Uber" while walking out of the car, with the voice MCP doing the capture in the background.
  • Agent workflows. Multi-step automations like "every Friday, scan Gmail, categorize, flag anything weird, email me the summary."
  • More tool primitives. Bulk recategorize, scheduled scans, comparison reports across years, mileage trip imports.

We'll see what users actually want — file feature requests against the npm packages or email support@expensebot.ai.

Why Gmail-Native Matters (the differentiator)

Most expense MCP servers — and there are now a few, including ExpenseLM published in late 2025 — wrap an existing expense API. That's useful. It means an AI agent can talk to whatever app you've already wired up.

ExpenseBot's MCP wraps a different surface: your Gmail and your Google Sheet. The place receipts actually live. When Claude calls scan_gmail, it's not querying a cleaned database that someone uploaded last week — it's pulling fresh receipts from the inbox, parsing them, and writing them straight into your sheet. The agent doesn't need you to import data first; the data import is part of the agent's job.

This matters more for some workflows than others. A solo freelancer or accountant whose receipts arrive as email confirmations gets the most leverage. Companies with corporate cards may want both — bank-side feeds for cards plus Gmail-native for the long tail of SaaS, travel, and supplies that arrive as email.

Different tools for different workflows. ExpenseLM and similar API-wrapper MCPs are good for what they do; the ExpenseBot MCP is for users who want their AI to manage receipts the way most receipts arrive — through Gmail. Both can coexist; nothing stops you running multiple MCP servers in the same Claude Desktop instance.

If you're an accountant wiring this up for clients, or a freelancer who wants a sane expense system that also plays with the AI tools you already use daily, the ExpenseBot MCP connection chooser is the next step. And if you want more on the Gmail philosophy, our deeper guide on how to track business expenses spells it out.

Frequently Asked Questions

What is the Model Context Protocol (MCP)?
The Model Context Protocol is an open standard from Anthropic, released in late 2024, that lets AI assistants connect to external data sources and tools. Think of it as a universal adapter — instead of every AI assistant building custom integrations for every app, MCP defines a shared protocol that both sides speak. An MCP server (like ExpenseBot's) exposes a set of tools; any MCP-compatible client (Claude Desktop, Cursor, ChatGPT desktop apps, custom agents) can call them. Once you've installed an MCP server, your AI assistant can search your data, run actions, and chain tools together without leaving the chat.
Which AI assistants work with the ExpenseBot MCP?
ExpenseBot has hosted connectors in ChatGPT and Claude, remote OAuth setup for compatible custom agents, and a local stdio package for desktop clients such as Cursor. Use the current connection chooser at expensebot.ai/mcp rather than copying an old client-specific configuration.
Do I need to be a developer to use the ExpenseBot MCP?
No. ChatGPT and Claude users choose ExpenseBot from the assistant's connector directory and complete browser sign-in. Compatible custom agents can add the remote OAuth server. Only local stdio clients need Node.js and an ExpenseBot token stored in the client's environment, never in chat or command arguments.
What can my AI assistant actually DO with my expense data?
The current catalog covers receipt capture, Gmail scanning and status, expense and income search, mileage, reports, client/project grouping, analytics, compliance, product help, and safe app handoffs. The exact advertised tools vary intentionally between hosted remote connectors and the local stdio package, so use the live catalog on the MCP setup page rather than a launch-era count.
Is my expense data sent to Anthropic or OpenAI?
Only the parts your AI assistant explicitly fetches to answer your question. MCP works on a request-response basis — when you ask Claude to summarize Q1 spending, Claude calls the search_expenses tool, the MCP server returns matching rows, and those rows are included in Claude's context to answer. ExpenseBot doesn't push your data to any AI provider in bulk. Your underlying data continues to live in your Google Sheet and Google Drive; the MCP server is a thin authenticated layer that returns query results on demand. If you want zero data sent to an AI provider, don't use the MCP — your spreadsheet still works the same way.
How do I revoke access if my MCP token leaks?
Open ExpenseBot Settings, go to AI Assistant Tokens, and click Revoke next to the token. The MCP server validates every call against the active token list — once you revoke, that token stops working immediately. You can also rotate tokens routinely; create a new one, update your Claude Desktop config, and revoke the old one. Tokens are stored hashed (SHA-256) so even ExpenseBot staff can't read the original value, and every call is audit-logged in Firestore against the token ID. If you suspect compromise, revoke first, investigate the audit log second.
Can I use the read-only MCP server without an ExpenseBot account?
Yes. The @expensebot/mcp-server package (no auth) exposes ExpenseBot's public knowledge base and documentation — the same content that powers the in-app help, FAQ, and tax deduction references. It's useful if you want Claude to answer general questions about Schedule C deductions, T2125 line items, mileage rates, or how ExpenseBot works without giving any AI access to your real expense data. No token, no account, no setup beyond adding it to your Claude Desktop config. The authenticated server (mcp-server-auth) is the one that needs an account because that's the one that touches your data.
Does the ExpenseBot MCP work with ChatGPT?
Yes. In ChatGPT, open Settings, choose Apps, search for ExpenseBot, and click Connect. Complete the ExpenseBot browser sign-in and consent flow; there is no JSON file or personal token to paste for the hosted connector.
Share:

Track Mileage Automatically with ExpenseBot

Google Maps calculates your distances. Current IRS & CRA rates applied automatically. Tax-ready mileage log in seconds.

No credit card required · Deploys in 30 seconds