Talk to your Splitwise. Get CRED-grade spending analytics.
ExpensifyAI is a Model Context Protocol (MCP) server for Splitwise that lets any LLM client (Claude, etc.) manage shared expenses and produce deterministic, premium spending analytics — category breakdowns, monthly trends, per-member comparisons, and minimum-transaction settlement plans — rendered as a self-contained, offline HTML dashboard.
Built on top of the excellent tarunn2799/splitwise-mcp; extended with a deterministic analytics engine and a category-first dashboard.
Interactive dashboard, generated from synthetic data. Open examples/demo-dashboard.html
in a browser to try it live — pick a date range and every section recomputes instantly.
- Deterministic by construction — every number is computed in pure Python with
Decimalmath (no float drift, no LLM estimation). Same input → byte-identical output. Each report carries a reconciliation check: per-expense shares must sum to cost, or the mismatch is flagged. - Category-first, à la CRED — an expandable "where it goes" view leads every report; tap a category to drill into its transactions.
- Seven analytics modules — category breakdown · monthly trend · owed-vs-paid ("mine vs split") · per-member comparison + category×member matrix · transaction ledger · top transactions · settlement optimizer (minimum transactions to settle a group — no other Splitwise tool has this).
- Interactive dashboard — CRED-grade dark UI with a live date-range picker + presets (this month / 3mo / 6mo / this year / all) that re-filter and recompute every section in the browser. Hand-rolled inline-SVG charts, validated colorblind-safe palette, fully offline (self-contained single file — no CDN, no server). All client math is integer paise, so the live recompute stays exact and reconciles against the Python source of truth.
- Two analytics tools —
analyze_spending(target_type, target_id?, dates?, generate_dashboard?)andcompare_group_members(group_id, …).target_typeisme|group|friend.
Splitwise-Pro-parity, built deterministically:
- Structured itemization —
create_itemized_expense(description, group_id, items, …)turns line-items into ONE expense where each item can split differently (beers ¾ to one person, groceries 4-way, cake between two). Each person's totalowed_shareis computed in exact integer paise (largest-remainder rounding, so an indivisible ₹100/3 still sums back to ₹100), and the expense is reconciled to its total before anything is written — a mismatch refuses to create rather than posting a wrong split.dry_run=Truepreviews the computed split. - Receipt scanning (LLM-vision-native) — no OCR engine, no cloud keys, no new dependencies:
the calling agent (Claude) reads the receipt image, extracts line-items, and calls
create_itemized_expense. The server owns the exact math and the Splitwise write. - Save default splits —
save_default_split(name, split)/list_default_splits/delete_default_split. Reuse a template by putting"split_ref": "roomies-4way"on an item. Stored locally in~/.expensifyai/splits.json.
Pick any date range — the whole dashboard recomputes live in the browser:
Try it without an account:
python examples/generate_demo.py # writes examples/demo-dashboard.html- Full API Access: Manage expenses, groups, friends, and comments.
- Natural Language Resolution: Fuzzy matching for names ("John" -> "John Smith") and groups.
- Dual Auth: Supports both OAuth 2.0 (recommended) and API Keys.
- Smart Caching: Optimizes performance for static data like categories and currencies.
git clone https://github.com/udaysrinu/ExpensifyAI
cd ExpensifyAI
python -m venv venv
source venv/bin/activate
pip install -e .See SETUP.md for detailed authentication and configuration instructions.
Run the included setup script:
python -m splitwise_mcp_server.oauth_setup
Use the keys provided there, and add all three to your mcp.json:
{
"mcpServers": {
"splitwise": {
"command": "python",
"args": ["-m", "splitwise_mcp_server"],
"env": {
"SPLITWISE_OAUTH_ACCESS_TOKEN": "your_token_here"
}
}
}
}Get your Auth Keys You can get your Consumer Key and Secret by registering an app at https://secure.splitwise.com/apps.
IMPORTANT: Using a Virtual Environment? If you installed the package in a
venvor Conda environment, you must use the absolute path to the python executable in your config."command": "/absolute/path/to/venv/bin/python"See SETUP.md for details.
The server enables natural language interactions with your Splitwise data.
Examples:
- "What's my current balance?"
- "Split a $50 dinner with Sarah."
- "Use the receipt I uploaded to split the dinner between Manav and me."
- "Show me expenses from last month."
- "Create a group called 'Ski Trip' with Mike."
See TOOLS.md for detailed documentation.
get-current-user: Get authenticated user informationget-user: Get information about a specific user
create-expense: Create a new expense with splitsget-expenses: List expenses with optional filtersget-expense: Get detailed expense informationupdate-expense: Update an existing expensedelete-expense: Delete an expense
get-groups: List all groupsget-group: Get detailed group informationcreate-group: Create a new groupdelete-group: Delete a groupadd-user-to-group: Add a user to a groupremove-user-from-group: Remove a user from a group
get-friends: List all friendsget-friend: Get detailed friend information
resolve-friend: Fuzzy match friend names to user IDsresolve-group: Fuzzy match group names to group IDsresolve-category: Fuzzy match category names to category IDs
create-comment: Add a comment to an expenseget-comments: Get all comments for an expensedelete-comment: Delete a comment
get-categories: Get all expense categoriesget-currencies: Get all supported currencies
add: Add multiple numberssubtract: Subtract numbersmultiply: Multiply numbersdivide: Divide numbersmodulo: Calculate remainder
# Setup
git clone https://github.com/udaysrinu/ExpensifyAI
cd ExpensifyAI
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
# Test
pytest # full suite
pytest tests/test_analytics.py # deterministic analytics (15 tests)
# See the dashboard with no account
python examples/generate_demo.py # writes examples/demo-dashboard.htmlMIT License. See LICENSE for details.
Built on top of tarunn2799/splitwise-mcp (MIT); the analytics engine, interactive dashboard, and tests are added by ExpensifyAI.

