Index / MCP servers / ExpenseBot

ExpenseBot MCP server

ExpenseBot is an MCP server with 59 tools an agent can call, among them add_cash_expense, add_income, add_income_from_csv. It answers at https://mcp.expensebot.ai/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 11 September 2026; the last check, on 21 October 2026, succeeded.

Status
Answering
Tools
59
Reliability
6 of 6 checks
Response time
243 ms
Transport
streamable HTTP
Last checked
21 October 2026

Receipt ingestion, Gmail capture, expense analysis, and reviewed reports for AI-agent workflows.

Description as the publisher wrote it.

The 59 tools ExpenseBot offers

ToolWhat it does
add_cash_expenseAdd an expense without a receipt, or record money a client provided in advance for expenses. Writes directly to the user's expense spreadsheet after confirmation. For an ordinary expense, call list_categories first and provide a configured
Inputs: merchant, total, date, category, subtotal, tax
add_incomeLog exactly one user-confirmed income payment manually (cash, check, Stripe payout, etc.). Never loop this tool over a statement, export, table, or multi-row list. For two or more payments, use add_income_from_csv for CSV/TSV/text or add_in
Inputs: amount, source, paymentMethod, date, currency, description
add_income_from_csvImport income from a CSV/TSV/text export (Stripe, PayPal, Square, Cash App, Venmo, OnlyFans, Patreon, Clips4Sale, Ko-fi, Gumroad, Etsy, Uber/Lyft/DoorDash driver exports, bank statements, and similar; max 500 KB). Same two-step contract as
Inputs: csvContent, csvText, paymentMethod, tag, confirm, previewId
add_income_from_fileImport income from an attached screenshot, image (JPEG, PNG, WebP, HEIC/HEIF), or PDF (payment screenshots, wallet apps, payout or bank statements; max 10 MB). This is a two-step tool. STEP 1: call it with the file and WITHOUT confirm — Exp
Inputs: photo, photoBase64, mimeType, paymentMethod, tag, confirm
add_mileage_entryLog a business mileage trip in ExpenseBot. Useful for realtors, consultants, contractors, and anyone who drives for work. Requires the user to have configured their mileage rate (cents/km or cents/mi) and unit (mi/km) in ExpenseBot Settings
Inputs: distance, purpose, date, roundTrip, destination, city
check_complianceUse only when the user explicitly asks to check an existing report for compliance issues such as missing business purpose or policy violations. Creating a report, excluding Personal expenses, sharing a report, or billing a client is not a c
Inputs: reportId, userRequest
check_featureCheck whether ExpenseBot supports a specific feature ('does ExpenseBot support X', 'can it integrate with Y'). Searches the public knowledge base and returns a confidence-scored answer + related questions. Works with or without authenticati
Inputs: feature
check_tax_deductibilityLook up whether a specific expense type or purchase is tax-DEDUCTIBLE (business write-off rules) based on the user's country/jurisdiction. This is a deductibility *advice* tool — use it for questions like 'is Uber deductible', 'can I write
Inputs: query, category, merchant
correct_expensesSafely correct the category, business purpose, or explicit attendees on an exact bounded set of recorded expenses. Examples: 'categorize these as Travel', 'add Client kickoff dinner as the business purpose for these meals', or 'add Fred, Ro
Inputs: change, selection, operationId, confirm, status, undo
create_client_invoiceCreate the exact invoice previously returned by prepare_client_invoice. This is a confirmed write: it revalidates the report snapshot and client identity, creates a private editable Google Doc plus private PDF and DOCX copies, records the i
Inputs: preparationId, confirmTax, operationId
create_reportCreate an expense report from a clear date, client, project, trip, category, or merchant request. Tags are ExpenseBot's grouping layer for clients, projects, project codes, and trips; call list_tags when the user's intended group is unclear
Inputs: dateRange, title, categories, tags, excludePersonal, excludedTags
export_reportGet a short-lived direct PDF download for one exact authorized expense report, plus the exact highlighted in-app report link. Use the in-app report for CSV, XLSX, receipt ZIP (when available), comments, invoicing, and other visually reviewe
Inputs: reportId
fetchFetch full details for a specific item returned by `search`. The id encodes the item type: • 'expense:<rowNumber>' — e.g., 'expense:42' for row 42 of the user's Expenses tab • 'report:<reportId>' — the alphanumeric Firestore document id fro
Inputs: id
fix_complianceSafely correct compliance issues on an exact bounded set of recorded expenses. Use only after the user explicitly asks to fix issues found by check_compliance. Use search_expenses to obtain each full expenseId, then pass those exact identit
Inputs: change, selection, operationId, confirm, status, undo
get_accounting_integration_statusCheck whether an accounting destination is connected and read-only setup state for the owner. Returns the selected organization/company/business, stored connection state, rollout state, and the single setup link for connecting or reconnecti
Inputs: provider, reportId
get_accounting_push_statusRead the authoritative posting and reconciliation status for one ExpenseBot report at an accounting destination. Use after a timeout or uncertain response before considering any retry. Returns status, submission time, posting mode, posted r
Inputs: provider, reportId
get_client_advance_balancesRead the same per-client advance balances shown in ExpenseBot's Client advances section. Use for questions like 'how much of Acme's advance remains?', 'which client floats are still open?', or 'do I owe a client a refund?'. A negative ledge
Inputs: clientEmail, clientName
get_client_invoiceGet the full financial and delivery summary for one issued client invoice, including subtotal, markup, tax, advance applied, balance due, dates, status, source report, and private Google Doc/PDF/DOCX links when available. Provide invoiceId
Inputs: clientEmail, invoiceId, invoiceNumber
get_credits_refundsList card refunds, cashback/rewards, and statement credits that ExpenseBot has already recorded — either as negative expenses or matched against the original charge. Examples: 'did my refund come through', 'show my statement credits', 'was
Inputs: clientEmail, dateRange, limit
get_deep_analyticsRun deeper, multi-step analytics on the user's expenses. Use for explanatory questions like 'why did my spending increase' or 'compare Q1 vs Q2'. Takes 10-30 seconds (runs as a background job, polled automatically). Returns: { message, data
Inputs: query, dateRange
get_expense_by_idFetch a single expense row by its sheet row number or by its ExpenseBot expenseId (the exact Receipt ID in Column Q). Returns the row's headers + values + a labeled {header → value} map so you can refer to a specific expense the user mentio
Inputs: rowNumber, expenseId
get_expense_splitsShow how an expense was split across categories, clients, properties, or business vs personal portions. Returns the single parent payment with its nested allocation lines — split lines are never counted as separate expenses, so totals stay
Inputs: clientEmail, receiptId, dateRange, onlySplit, limit
get_income_summaryGet income totals, breakdowns, and analytics from the Income tab. Covers Schedule C / T2125 income, Schedule B drill-in (interest, dividends, tax refunds, security deposits), rental income, and per-source / per-payment-method / per-category
Inputs: query, groupBy, dateRange, incomeTagPrefix
get_last_receipt_resultCheck the authoritative final outcome of a receipt image/PDF batch submitted with submit_receipt. After submit_receipt returns submissionId, call this tool with that exact ID using the polling interval and time allowance in the submit_recei
Inputs: submissionId, withinSeconds
get_mileage_summaryMileage analytics — totals, breakdowns by month / client / purpose / category, plus deduction framing (cents-per-mile or cents-per-km × distance, country-aware IRS / CRA rates). Examples: 'mileage this year', 'miles driven for Acme', 'milea
Inputs: query, groupBy, dateRange
get_monthly_books_reviewMonth-end summary of the user's books for one calendar month: income recorded, money spent, net, top spending categories and merchants, plus alerts for anything unusual that month. Examples: 'how did last month go', 'close out my books for
Inputs: clientEmail, period
get_per_tag_pnlPer-tag P&L — revenue, cost, profit, and margin grouped by tag (per-client, per-property, per-event, per-realtor-deal). Requires both income AND expense rows to be tagged with matching labels. Common tag-prefix shortcuts: 'Prop –' (rentals)
Inputs: query, tagPrefix, dateRange
get_pnlCompute Profit & Loss (P&L / net income / margin) by combining the Income tab with expense tabs. Examples: 'am I profitable this year', 'P&L for Q1', 'net income last quarter', 'what's my margin', 'P&L this year vs last' (YoY). Supports per
Inputs: clientEmail, query, dateRange
get_recent_activityShow what the user (or their AI assistants) has recently done in ExpenseBot via this MCP server: which tools were called, when, with what arguments, and whether they succeeded. This is a log of assistant TOOL CALLS, not the processing histo
Inputs: limit, sinceDays, actionId
get_report_detailsGet full details of a specific expense report including all expenses, totals, and compliance status. Use only when the user explicitly asks to inspect an existing report's details. Never call this as a preflight or follow-up to creating, sh
Inputs: clientEmail, reportId, userRequest
get_scan_statusCheck the authoritative status of the user's Gmail receipt scans. Returns the active scan lock, the same live phase and item progress shown by ExpenseBot's in-app status pill, queued or attention-needed years, completed calendar years, curr
get_spending_summarySummarize the user's recorded expenses with totals and breakdowns by category, merchant, month, tag, source, or payment method. Supports date ranges, period comparisons, and total, count, or average metrics. Read-only. Returns: { message, d
Inputs: clientEmail, query, categories, dateRange, groupBy, metric
get_spreadsheet_urlReturn the user's master ExpenseBot Google Sheet plus authenticated ExpenseBot workspace links, each with a label and a description of when to use it. Use this when the user asks to open, view, check, or edit their spreadsheet; review expen
get_subscription_auditSubscription audit — wraps the Subscription Auditor engine to find recurring charges, duplicates, price increases, and trial-conversion suspects in the user's expenses. Examples: 'recurring subscriptions', 'duplicate subscriptions', 'price
Inputs: query, focus, dateRange
get_trip_suggestionsShow ExpenseBot's current high-confidence Trip Intelligence proposals from Review Expenses. Read-only: never groups, tags, creates reports, or writes to the spreadsheet. Each proposal returns strict YYYY-MM-DD dates, evidence, locations, an
Inputs: clientEmail, limit
group_expensesGroup an exact set of recorded expenses for a client, project, trip, job, or other user-named purpose. Examples: 'group my Mexico meals for client Rob', 'put these Vegas expenses under the Vegas project', or 'group these for client Rob and
Inputs: group, selection, operationId, confirm, approveNewGroup, createReport
list_categoriesList the user's configured expense categories and billing accounts. Use this BEFORE calling tools that need a category (add_cash_expense, add_mileage_entry, create_report) so you pass the user's actual category names, not guesses. Returns t
list_client_invoicesList the user's issued client invoices (accounts receivable) — who owes them money, how much, and when it is due. Examples: 'which invoices are outstanding', 'what does Acme still owe me', 'any overdue invoices', 'how much am I waiting to g
Inputs: clientEmail, status, clientName, limit
list_income_categoriesList ExpenseBot's fixed income tax categories. Unlike Expense Accounts, these are not user-configured. Use this BEFORE calling add_income so you pass an exact canonical category instead of guessing.
list_reportsList the user's expense reports with pagination. Filter by status (All, Draft, Submitted, Shared). Each exact report includes its app, Bill Client, and accounting handoff URLs. Use the matching accounting URL only when the user explicitly a
Inputs: clientEmail, page, limit, filter
19 more tools

list_tags, mark_client_invoice_paid, parse_expense, prepare_client_invoice, process_gmail_receipts, request_accounting_integration, scan_gmail, scan_gmail_years, search, search_expenses, search_knowledge, send_report_to_accounting, share_report, submit_receipt, trace_document, update_expense, whatif_afford, whatif_client, whatif_tax_setaside

Add ExpenseBot to your AI client

Every block below points at https://mcp.expensebot.ai/mcp. Pick your client and copy.

Claude Code: one command in your terminal
claude mcp add --transport http expensebot https://mcp.expensebot.ai/mcp
Claude Desktop: claude_desktop_config.json
{
  "mcpServers": {
    "expensebot": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.expensebot.ai/mcp"]
    }
  }
}
Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "expensebot": {
      "url": "https://mcp.expensebot.ai/mcp"
    }
  }
}
VS Code and GitHub Copilot: .vscode/mcp.json
{
  "servers": {
    "expensebot": {
      "type": "http",
      "url": "https://mcp.expensebot.ai/mcp"
    }
  }
}
Zed: Zed settings.json
{
  "context_servers": {
    "expensebot": {
      "url": "https://mcp.expensebot.ai/mcp"
    }
  }
}
Windsurf: ~/.codeium/mcp_config.json
{
  "mcpServers": {
    "expensebot": {
      "serverUrl": "https://mcp.expensebot.ai/mcp"
    }
  }
}
JetBrains AI Assistant: Settings, Tools, AI Assistant, MCP, New MCP Server, as JSON
{
  "mcpServers": {
    "expensebot": {
      "url": "https://mcp.expensebot.ai/mcp"
    }
  }
}
Continue: .continue/mcpServers/neuronto.yaml
name: ExpenseBot
version: 0.0.1
schema: v1
mcpServers:
  - name: ExpenseBot
    type: streamable-http
    url: https://mcp.expensebot.ai/mcp
Gemini CLI: ~/.gemini/settings.json
{
  "mcpServers": {
    "expensebot": {
      "httpUrl": "https://mcp.expensebot.ai/mcp"
    }
  }
}
Codex CLI: MCP server config
{
  "mcpServers": {
    "expensebot": {
      "type": "http",
      "url": "https://mcp.expensebot.ai/mcp"
    }
  }
}
Warp: MCP servers, + Add, paste JSON
{
  "mcpServers": {
    "expensebot": {
      "url": "https://mcp.expensebot.ai/mcp"
    }
  }
}
Goose: a one-click extension link
goose://extension?url=https%3A%2F%2Fmcp.expensebot.ai%2Fmcp&type=streamable_http&id=expensebot&name=ExpenseBot

Is ExpenseBot up right now?

It answered our last check on 21 October 2026 in 243 ms. Over 6 checks since 11 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.

MCP servers similar to ExpenseBot

Questions about ExpenseBot

How many tools does ExpenseBot have?

59, as returned by the server's own tools/list on 13 September 2026: add_cash_expense, add_income, add_income_from_csv, add_income_from_file, add_mileage_entry, check_compliance, check_feature, check_tax_deductibility, and 51 more.

Is ExpenseBot down?

It answered our last check on 21 October 2026 in 243 ms. Over 6 checks since 11 September 2026 it answered 6.

How do I add ExpenseBot to Cursor?

Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.expensebot.ai/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.

Does ExpenseBot need an API key?

It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.

Where this comes from

Publisher: io.github.totesmagotes. Endpoint host: mcp.expensebot.ai. ARD identifier: urn:air:io.github.totesmagotes:mcp:mcp-server-auth. First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page is inferred from its name. Ranking in Neuronto search is never for sale.

Is this your server? Get a message the day it stops answering or its tools change: monitoring, 14 days free. Or claim the domain to manage how it is listed.