Skip to main content
Glama
udaysrinu

ExpensifyAI

by udaysrinu

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SPLITWISE_OAUTH_ACCESS_TOKENYesYour Splitwise OAuth access token

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_current_userA

Get the current authenticated user's profile (id, name, email, picture).

get_userB

Get a user's profile by their ID.

create_expenseA

Create a new expense. Cost is a string with 2 decimals (e.g. "25.50"). Splits equally by default; provide users list with paid_share/owed_share for custom splits. Each user needs user_id or (email + first_name + last_name). Set repeat_interval to "weekly", "fortnightly", "monthly", or "yearly" for recurring expenses.

get_expensesC

List expenses with optional filters. Dates are ISO 8601 format. Max limit is 100.

get_expenseA

Get full details of a single expense including users, splits, and comments.

update_expenseA

Update an existing expense. Only provided fields are changed. If any users are supplied, all shares for the expense are overwritten with the provided values.

delete_expenseA

Delete an expense permanently. Use restore_expense to undo.

restore_expenseA

Restore a previously deleted expense. Use this to undo an accidental deletion.

get_groupsA

List all groups the current user belongs to, with members and balances.

get_groupA

Get a group's details including members, balances, and simplified debts.

create_groupA

Create a new group. group_type is one of: home, trip, couple, other. Optionally add initial members via users list with user_id or email+name.

delete_groupA

Delete a group. All expenses must be settled first.

add_user_to_groupB

Add a user to a group by user_id or by email (with first_name/last_name for new invites).

remove_user_from_groupB

Remove a user from a group. User must have zero balance in the group.

get_friendsA

List all friends with their balance information.

get_friendB

Get a friend's details including balances and shared groups.

create_friendB

Add a friend by email address. Optionally provide their first and last name.

delete_friendA

Remove a friendship. Does not affect shared expenses or balances.

resolve_friendA

Fuzzy-match a friend by name. Returns matches with id, name, and match_score. Use this when you know a name but not the user_id.

resolve_groupA

Fuzzy-match a group by name. Returns matches with id, name, and match_score. Use this when you know a group name but not the group_id.

resolve_categoryB

Fuzzy-match an expense category by name (e.g. "food", "utilities"). Returns matches with id, name, and match_score. Searches subcategories too.

create_commentB

Add a comment to an expense. Visible to all users in the expense.

get_commentsA

Get all comments on an expense.

delete_commentA

Delete a comment. You can only delete your own comments.

get_notificationsA

Get recent notifications for the current user (new expenses, payments, comments, group activity).

get_categoriesA

Get all expense categories and subcategories. Results are cached.

get_currenciesA

Get all supported currency codes and symbols. Results are cached.

analyze_spendingA

Deterministic spending analytics for the current user, a group, or a friend.

All numbers are computed in Python (never estimated by the model): category breakdown, monthly trend, owed-vs-paid ("mine vs split"), transaction ledger, top transactions, and — for groups — per-member comparison, category×member matrix, and a minimum-transaction settlement plan. Every result includes a reconciliation check (shares must sum to cost) and a multi-currency guard.

target_type: "me" (all your expenses), "group" (needs target_id=group_id), or "friend" (needs target_id=friend user_id). dated_after / dated_before: ISO 8601 date filters (optional). generate_dashboard: if True, also writes a self-contained HTML dashboard and returns its file path in dashboard_path. Perspective is always the authenticated user.

compare_group_membersA

Deterministic per-member comparison for a group: total spend + ranking, category×member matrix, insights (highest/lowest/average/spread), and a minimum-transaction settlement plan. Convenience wrapper over analyze_spending with target_type='group'.

create_itemized_expenseA

Create ONE Splitwise expense from itemized line-items, each with its OWN split.

This is how a receipt becomes an expense: the agent extracts line-items from the receipt image and passes them here. Each item can split differently (e.g. beers 3/4 to one person, groceries 4-way, cake between two) — the tool computes each person's total owed_share exactly in integer paise and reconciles to the total before writing. Set dry_run=True to preview the computed split without creating.

items: list of { "desc": "Beers", "amount": "2710.00", # rupees, string with 2 decimals "category": "Drinks", # optional (free text, informational) "paid_by": , # who fronted this item "split": { # OR "split_ref": "" "type": "equal" | "shares" | "exact", "among": [user_id, ...], # for equal/shares "shares": {user_id: weight, ...}, # for shares "exact": {user_id: "amount", ...} # for exact (must sum to amount) } }

save_default_splitA

Save a reusable split template by name (e.g. "roomies-4way").

split: {"type": "equal"|"shares", "among": [user_id, ...], "shares"?: {user_id: weight}} Referenced from create_itemized_expense items via "split_ref": "". Stored locally in ~/.expensifyai/splits.json.

list_default_splitsB

List all saved split templates.

delete_default_splitB

Delete a saved split template by name.

attach_receiptA

Attach a receipt image or PDF (from a local file path) to an existing expense.

Uploads the file to Splitwise via multipart on update_expense. Supports common image types and PDF. The receipt then shows on the expense in the app/website. (Splitwise's API only exposes receipt UPLOAD, not OCR — pair this with create_itemized_expense, where the calling agent reads the image for line-items.)

sync_allA

Sync Splitwise into a local SQLite mirror for instant offline search.

Delta sync: uses the API's updated_after cursor so only expenses that were added, edited, moved, or deleted since the last sync are fetched (first run, or full=True, pulls everything). Groups and friends are fully refreshed each run (small). Upserts by expense id, so re-running is safe. Returns counts.

search_notesA

Fuzzy search over expense descriptions AND notes/details in the local mirror.

Use when exact search misses — catches typos, abbreviations (vizag/vskp/vtz), and amounts or words buried inside a bundled expense's note (e.g. a '5552' line inside a multi-item details field). Returns matches with a score (100 = exact substring) and whether it hit the description or the note. Run sync_all first.

search_expensesA

Search the local mirror (run sync_all first). Full-text over description/details/ category, plus filters: amount range, user_id, group_id, category, date range. Returns matching expenses. Instant, offline, no API calls, no Pro paywall.

import_statementA

Turn parsed statement rows into a reviewable import proposal (creates NOTHING).

transactions: list of {date: 'YYYY-MM-DD', merchant (or description), amount, category? (override), split_ref? (a saved default-split name)}. default_split_name: template applied to rows without their own split_ref; if omitted, rows default to 100%-personal (you pay + owe fully). dedup: if True, flags rows that match an existing expense in the local mirror (same day + same amount) and marks them to skip, so re-importing a statement doesn't double-add. (Run sync_all first for dedup to see your existing data.)

Returns proposals + summary. Review, then call confirm_import with the rows to create.

confirm_importA

Bulk-create expenses from approved statement rows (after import_statement review).

rows: approved items, each {date, description, amount, category?, split_ref?}. Rows with a split_ref use that saved template; otherwise 100%-personal. group_id: default group for created expenses (0 = non-group). Per-row group_id overrides. Each expense is created via the itemization engine (exact paise, reconciled). Returns a per-row result list (created id or error). Sequential to stay under rate limits.

gmail_find_statementsA

Find bank/card statement emails in Gmail (read-only). Returns message id/subject/ from/date/snippet for you to pick from. Omit query to use a default that targets common Indian bank/card statement senders in the last 3 months. Then call gmail_read_statement.

gmail_read_statementA

Read one statement email's decoded text (read-only). Returns id/subject/from/date/text. Extract the transactions from text, then call import_statement to review + import them.

unlock_statement_pdfA

Unlock + parse a password-protected statement PDF attached to a Gmail message.

Provide name + dob (+ optional card_last4) so passwords can be derived (common Indian bank formats), or pass an explicit password. Returns parsed transactions [{date, description, amount, credit}] plus counts. Then review via import_statement.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 42 tools

Disambiguation4/5

Most tools have clear distinct purposes (expenses, groups, friends, splits, sync/search, import pipeline). Some potential confusion exists between get_expenses/search_expenses/search_notes and analyze_spending/compare_group_members, but descriptions clarify the differences.

Naming Consistency4/5

Tool names mostly follow a consistent verb_noun pattern (create_expense, get_expense, update_expense, delete_expense, restore_expense). Minor deviations: sync_all, analyze_spending, compare_group_members, and the gmail_* / unlock_statement_pdf tools break the pattern slightly but remain readable.

Tool Count3/5

42 tools is on the heavy side for a single server, but the breadth is justified by the domain (expense management, groups, friends, itemization, import pipeline, sync/search). Still, the count feels high and could overwhelm an agent.

Completeness5/5

The tool surface covers the full expense lifecycle (create, read, update, delete, restore), groups, friends, comments, categories, currencies, notifications, itemized expenses, default splits, receipt attachment, local sync/search, and a full statement import pipeline (Gmail → PDF unlock → import → confirm). No obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues