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 — in 30 seconds, not 20 minutes.

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 30-second demo that motivated it, the 21 tools your assistant gets, a 3-minute setup walkthrough, 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.

Used to take 20 minutes of clicking. Now 30 seconds in a chat box.

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 (v0.1.2) — 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 (v0.3.2) — 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 official 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 server (your account, your data)
npx -y @expensebot/mcp-server-auth --token=YOUR_TOKEN_HERE

All 21 Tools (With Examples)

The authenticated server ships with 21 tools, grouped into six categories. Each entry below shows what your AI can ask for in plain English.

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"
  • list_categories — "What expense categories am I using right now?"
  • list_tags — "Which tags do I have set up for clients?"
  • search_knowledge — "How does ExpenseBot handle T2125 line item 9281?"

Reports (4 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"

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"

Onboarding (1 tool)

  • get_signup_link — used when an unauthenticated AI assistant nudges a new user toward signing up; surfaces a clean signup URL inline.

Ready to wire it up?

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

Get my MCP token →

3-Minute Setup (Walkthrough)

Three steps. No code, no server to host, no global installs.

1. Get your token.

Log into ExpenseBot, open Settings → AI Assistant Tokens, and click "Create token." Copy the value (you only see it once — store it somewhere you can find it again).

2. Add the server to your Claude Desktop config.

Claude Desktop reads MCP servers from a JSON file. Locations:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Open the file (create it if it doesn't exist) and add this block:

{
  "mcpServers": {
    "expensebot": {
      "command": "npx",
      "args": ["-y", "@expensebot/mcp-server-auth", "--token=YOUR_TOKEN_HERE"]
    }
  }
}

Replace YOUR_TOKEN_HERE with the token from step 1.

3. Restart Claude Desktop and test.

Quit Claude Desktop fully and reopen it. You should see a new tools indicator near the chat input. Try: "Use ExpenseBot to summarize my March spending." If Claude invokes the get_spending_summary tool, you're live.

If nothing happens: check the JSON for syntax errors (a stray comma kills the whole config), confirm the token is valid in Settings, and try restarting Claude Desktop one more time.

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 install page 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?
Any MCP-compatible client works. The most common ones today are Claude Desktop (Anthropic), Cursor (the AI code editor), Zed, and a growing list of agent frameworks. ChatGPT's desktop app also added MCP support in 2025, so it works there too. Configuration is similar across clients — you add an entry to a JSON config file pointing at the npm package, restart the client, and the tools appear. The ExpenseBot MCP servers are published on npm and listed on the official MCP Registry, so any client that pulls from those sources can find them.
Do I need to be a developer to use the ExpenseBot MCP?
No. The setup is three steps: generate a token in ExpenseBot Settings, paste a small JSON block into your Claude Desktop config file, and restart Claude. There's no code to write, no server to host, and no API keys to manage beyond the one token. The npx command in the config handles downloading and running the MCP server automatically — you don't install anything globally. If you can edit a settings file in TextEdit or Notepad, you can set this up in three minutes.
What can my AI assistant actually DO with my expense data?
Twenty-one things, grouped into six categories. Capture: submit a receipt photo, add a cash expense, log a mileage trip, log received income, parse a free-text description. Gmail: process the receipts your AI assistant points it at, or trigger a fresh Gmail scan. Search and lookup: find expenses, list your active categories and tags, search ExpenseBot's documentation. Reports: create custom reports, list past reports, get details, share with your accountant. Analytics and compliance: spending summaries, deep analytics, flag missing data, auto-fix common gaps, check tax deductibility. Onboarding: surface a signup link when an unauthenticated AI is helping a new user. The natural-language layer means you ask in English and the AI picks the right tool.
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 — ChatGPT's desktop apps support MCP servers through the same configuration pattern as Claude Desktop. Setup details vary slightly between clients (the config file location and JSON shape differ), but the npm package is the same. Cursor, Zed, and most agent frameworks (LangChain, LlamaIndex agent integrations) also work. The protocol is intentionally client-agnostic, which is the whole point of MCP existing — one server reaches every AI assistant the user already runs.
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