chrischall avatar

Splitwise Mcp

chrischall/splitwise-mcp

Connects Claude to your Splitwise account through the official Splitwise API, exposing 20 tools for managing shared expenses, groups, and friends. You can ask Claude to add expenses with custom splits, check balances, create groups, invite friends, or search past transactions. It covers the full CRUD surface: create/update/delete expenses and comments, manage group membership, handle friend requests. Runs via npx or from source, authenticates with your Splitwise API key. Built entirely by Claude Code, so review the implementation before use. Best for automating expense tracking when you're already managing shared costs in Splitwise and want natural language access without opening the app.

GitHub stars
1
tools
27
auth
Secret needed
transport
STDIO
env vars
3
last updated
Nov 7, 2026

Tools

27 tools

Public tool metadata for what this MCP can expose to an agent.

users.get_currentReturns information about the authenticated user: id, name, email, default currency, locale, registration status.

Returns information about the authenticated user: id, name, email, default currency, locale, registration status.

No parameter schema in public metadata yet.

users.getReturns public information about another Splitwise user by id.1 params

Returns public information about another Splitwise user by id.

Parameters* required
idinteger
path parameter
users.updateUpdate the authenticated user's profile (first_name, last_name, email, password, default_currency, locale, etc.).7 params

Update the authenticated user's profile (first_name, last_name, email, password, default_currency, locale, etc.).

Parameters* required
default_currencystring
body parameter
emailstring
body parameter
first_namestring
body parameter
idinteger
path parameter
last_namestring
body parameter
localestring
body parameter
passwordstring
body parameter
groups.list**Note**: Expenses that are not associated with a group are listed in a group with ID 0.

**Note**: Expenses that are not associated with a group are listed in a group with ID 0.

No parameter schema in public metadata yet.

groups.getReturns full details for a group: members, balances, simplified-debts setting, group type, avatar.1 params

Returns full details for a group: members, balances, simplified-debts setting, group type, avatar.

Parameters* required
idinteger
path parameter
groups.createCreates a new group. Adds the current user to the group by default. **Note**: group user parameters must be flattened into the format `users__{index}__{property}`, where `property` is `user_id`, `first_name`, `last_name`, or `email`. The user's email or ID must be provided.3 params

Creates a new group. Adds the current user to the group by default. **Note**: group user parameters must be flattened into the format `users__{index}__{property}`, where `property` is `user_id`, `first_name`, `last_name`, or `email`. The user's email or ID must be provided.

Parameters* required
group_typestring
What is the group used for? **Note**: It is recommended to use `home` in place of `house` or `apartment`. one of home · trip · couple · other · apartment · house
namestring
body parameter
simplify_by_defaultboolean
Turn on simplify debts?
groups.deleteDelete an existing group. Destroys all associated records (expenses, etc.)1 params

Delete an existing group. Destroys all associated records (expenses, etc.)

Parameters* required
idinteger
path parameter
groups.restoreRestores a deleted group. **Note**: 200 OK does not indicate a successful response. You must check the `success` value of the response.1 params

Restores a deleted group. **Note**: 200 OK does not indicate a successful response. You must check the `success` value of the response.

Parameters* required
idinteger
path parameter
groups.add_user**Note**: 200 OK does not indicate a successful response. You must check the `success` value of the response.1 params

**Note**: 200 OK does not indicate a successful response. You must check the `success` value of the response.

Parameters* required
_bodystring
body parameter
groups.remove_userRemove a user from a group. Does not succeed if the user has a non-zero balance. **Note:** 200 OK does not indicate a successful response. You must check the success value of the response.2 params

Remove a user from a group. Does not succeed if the user has a non-zero balance. **Note:** 200 OK does not indicate a successful response. You must check the success value of the response.

Parameters* required
group_idinteger
body parameter
user_idinteger
body parameter
friends.list**Note**: `group` objects only include group balances with that friend.

**Note**: `group` objects only include group balances with that friend.

No parameter schema in public metadata yet.

friends.getReturns details about a single friendship including balances by currency and any pending expenses with that friend.1 params

Returns details about a single friendship including balances by currency and any pending expenses with that friend.

Parameters* required
idinteger
User ID of the friend
friends.createAdds a friend. If the other user does not exist, you must supply `user_first_name`. If the other user exists, `user_first_name` and `user_last_name` will be ignored.3 params

Adds a friend. If the other user does not exist, you must supply `user_first_name`. If the other user exists, `user_first_name` and `user_last_name` will be ignored.

Parameters* required
user_emailstring
body parameter
user_first_namestring
body parameter
user_last_namestring
body parameter
friends.create_batchAdd multiple friends at once. For each user, if the other user does not exist, you must supply `users__{index}__first_name`. **Note**: user parameters must be flattened into the format `users__{index}__{property}`, where `property` is `first_name`, `last_name`, or `email`.1 params

Add multiple friends at once. For each user, if the other user does not exist, you must supply `users__{index}__first_name`. **Note**: user parameters must be flattened into the format `users__{index}__{property}`, where `property` is `first_name`, `last_name`, or `email`.

Parameters* required
_bodystring
body parameter
friends.deleteGiven a friend ID, break off the friendship between the current user and the specified user. **Note**: 200 OK does not indicate a successful response. You must check the `success` value of the response.1 params

Given a friend ID, break off the friendship between the current user and the specified user. **Note**: 200 OK does not indicate a successful response. You must check the `success` value of the response.

Parameters* required
idinteger
User ID of the friend
reference.currenciesReturns a list of all currencies allowed by the system. These are mostly ISO 4217 codes, but we do sometimes use pending codes or unofficial, colloquial codes (like BTC instead of XBT for Bitcoin).

Returns a list of all currencies allowed by the system. These are mostly ISO 4217 codes, but we do sometimes use pending codes or unofficial, colloquial codes (like BTC instead of XBT for Bitcoin).

No parameter schema in public metadata yet.

expenses.getReturns full details for a single expense by id: payers, splits, shares, comments count, group, and audit metadata.1 params

Returns full details for a single expense by id: payers, splits, shares, comments count, group, and audit metadata.

Parameters* required
idinteger
path parameter
expenses.listList expenses visible to the authenticated user. Supports filters: group_id, friend_id, dated_after, dated_before, updated_after, updated_before, limit, offset.8 params

List expenses visible to the authenticated user. Supports filters: group_id, friend_id, dated_after, dated_before, updated_after, updated_before, limit, offset.

Parameters* required
dated_afterstring
query parameter
dated_beforestring
query parameter
friend_idinteger
ID of another user. If provided, only expenses between the current and provided user will be returned.
group_idinteger
If provided, only expenses in that group will be returned, and `friend_id` will be ignored.
limitinteger
query parameterdefault: 20
offsetinteger
query parameterdefault: 0
updated_afterstring
query parameter
updated_beforestring
query parameter
expenses.createCreates an expense. You may either split an expense equally (only with `group_id` provided), or supply a list of shares. When splitting equally, the authenticated user is assumed to be the payer. When providing a list of shares, each share must include `paid_share` and `owed_s...1 params

Creates an expense. You may either split an expense equally (only with `group_id` provided), or supply a list of shares. When splitting equally, the authenticated user is assumed to be the payer. When providing a list of shares, each share must include `paid_share` and `owed_s...

Parameters* required
_bodystring
body parameter
expenses.updateUpdates an expense. Parameters are the same as in `create_expense`, but you only need to include parameters that are changing from the previous values. If any values is supplied for `users__{index}__{property}`, _all_ shares for the expense will be overwritten with the provide...17 params

Updates an expense. Parameters are the same as in `create_expense`, but you only need to include parameters that are changing from the previous values. If any values is supplied for `users__{index}__{property}`, _all_ shares for the expense will be overwritten with the provide...

Parameters* required
category_idinteger
A category id from `get_categories`
coststring
A string representation of a decimal value, limited to 2 decimal places
currency_codestring
A currency code. Must be in the list from `get_currencies`
datestring
The date and time the expense took place. May differ from `created_at`
descriptionstring
A short description of the expense
detailsstring
Also known as "notes."
group_idinteger
The group to put this expense in, or `0` to create an expense outside of a group.
idinteger
ID of the expense to update
repeat_intervalstring
body parameterone of never · weekly · fortnightly · monthly · yearly
users__0__owed_sharestring
Decimal amount as a string with 2 decimal places. The amount this user owes for the expense
users__0__paid_sharestring
Decimal amount as a string with 2 decimal places. The amount this user paid for the expense
users__0__user_idinteger
body parameter
users__1__emailstring
body parameter
users__1__first_namestring
body parameter
users__1__last_namestring
body parameter
users__1__owed_sharestring
Decimal amount as a string with 2 decimal places. The amount this user owes for the expense
users__1__paid_sharestring
Decimal amount as a string with 2 decimal places. The amount this user paid for the expense
expenses.delete**Note**: 200 OK does not indicate a successful response. The operation was successful only if `success` is true.1 params

**Note**: 200 OK does not indicate a successful response. The operation was successful only if `success` is true.

Parameters* required
idinteger
ID of the expense to delete
expenses.restore**Note**: 200 OK does not indicate a successful response. The operation was successful only if `success` is true.1 params

**Note**: 200 OK does not indicate a successful response. The operation was successful only if `success` is true.

Parameters* required
idinteger
ID of the expense to restore
comments.listReturns the comments on a given expense. `expense_id` is required.1 params

Returns the comments on a given expense. `expense_id` is required.

Parameters* required
expense_idinteger
query parameter
comments.createAdd a comment to an existing expense by expense_id.2 params

Add a comment to an existing expense by expense_id.

Parameters* required
contentstring
body parameter
expense_idinteger
body parameter
comments.deleteDeletes a comment. Returns the deleted comment.1 params

Deletes a comment. Returns the deleted comment.

Parameters* required
idinteger
path parameter
notifications.listReturn a list of recent activity on the users account with the most recent items first. `content` will be suitable for display in HTML and uses only the `<strong>`, `<strike>`, `<small>`, `<br>` and `<font color="#FFEE44">` tags. The `type` value indicates what the notificatio...2 params

Return a list of recent activity on the users account with the most recent items first. `content` will be suitable for display in HTML and uses only the `<strong>`, `<strike>`, `<small>`, `<br>` and `<font color="#FFEE44">` tags. The `type` value indicates what the notificatio...

Parameters* required
limitinteger
Omit (or provide `0`) to get the maximum number of notifications.default: 0
updated_afterstring
If provided, returns only notifications after this time.
reference.categoriesReturns a list of all categories Splitwise allows for expenses. There are parent categories that represent groups of categories with subcategories for more specific categorization. When creating expenses, you must use a subcategory, not a parent category. If you intend for an...

Returns a list of all categories Splitwise allows for expenses. There are parent categories that represent groups of categories with subcategories for more specific categorization. When creating expenses, you must use a subcategory, not a parent category. If you intend for an...

No parameter schema in public metadata yet.

Sponsors

Configuration

SPLITWISE_API_KEY*secret

Your Splitwise API key (splitwise.com/apps/api)

SPLITWISE_OUTPUT_DIR

Directory sw_get_receipt writes downloaded receipts into (default: ~/Downloads/splitwise-mcp)

SPLITWISE_INPUT_DIR

Directory receipt.path may read uploads from (unset: receipts are accepted as base64 only)

Readme

Splitwise MCP

CI npm license

A Model Context Protocol server that connects Claude to Splitwise, giving you natural-language access to your expenses, groups, friends, and balances.

[!WARNING] AI-developed project. This codebase was entirely built and is actively maintained by Claude Code. No human has audited the implementation. Review all code and tool permissions before use.

What you can do

Ask Claude things like:


View the full README on GitHub

Details

Repository
github.com/chrischall/splitwise-mcp
Package
splitwise-mcp
Transport
STDIO
Auth
Required
Registry
MCP registry, active

More from chrischall