
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 toolsPublic 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.
idintegerusers.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.).
default_currencystringemailstringfirst_namestringidintegerlast_namestringlocalestringpasswordstringgroups.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.
idintegergroups.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.
group_typestringhome · trip · couple · other · apartment · housenamestringsimplify_by_defaultbooleangroups.deleteDelete an existing group. Destroys all associated records (expenses, etc.)1 params
Delete an existing group. Destroys all associated records (expenses, etc.)
idintegergroups.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.
idintegergroups.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.
_bodystringgroups.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.
group_idintegeruser_idintegerfriends.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.
idintegerfriends.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.
user_emailstringuser_first_namestringuser_last_namestringfriends.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`.
_bodystringfriends.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.
idintegerreference.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.
idintegerexpenses.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.
dated_afterstringdated_beforestringfriend_idintegergroup_idintegerlimitintegeroffsetintegerupdated_afterstringupdated_beforestringexpenses.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...
_bodystringexpenses.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...
category_idintegercoststringcurrency_codestringdatestringdescriptionstringdetailsstringgroup_idintegeridintegerrepeat_intervalstringnever · weekly · fortnightly · monthly · yearlyusers__0__owed_sharestringusers__0__paid_sharestringusers__0__user_idintegerusers__1__emailstringusers__1__first_namestringusers__1__last_namestringusers__1__owed_sharestringusers__1__paid_sharestringexpenses.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.
idintegerexpenses.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.
idintegercomments.listReturns the comments on a given expense. `expense_id` is required.1 params
Returns the comments on a given expense. `expense_id` is required.
expense_idintegercomments.createAdd a comment to an existing expense by expense_id.2 params
Add a comment to an existing expense by expense_id.
contentstringexpense_idintegercomments.deleteDeletes a comment. Returns the deleted comment.1 params
Deletes a comment. Returns the deleted comment.
idintegernotifications.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...
limitintegerupdated_afterstringreference.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*secretYour Splitwise API key (splitwise.com/apps/api)
SPLITWISE_OUTPUT_DIRDirectory sw_get_receipt writes downloaded receipts into (default: ~/Downloads/splitwise-mcp)
SPLITWISE_INPUT_DIRDirectory receipt.path may read uploads from (unset: receipts are accepted as base64 only)
Readme
Splitwise MCP
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:
Details
- Repository
- github.com/chrischall/splitwise-mcp
- Package
splitwise-mcp- Transport
- STDIO
- Auth
- Required
- Registry
- MCP registry, active
More from chrischall
- Artsonia Mcp1
- Canvas Parent Mcp1
- Gogcli Mcp Classroom1
- Gogcli Mcp Drive1
- Gogcli Mcp Slides1
- Honeybook Mcp1
- Opentable Mcp1
- Compass Mcp
- Evite Mcp
- Gemini Mcp
- Hellofresh Mcp
- Homes Mcp
- Signupgenius Mcp
- Zillow Mcp
- Musicbrainz Mcp
- Skylight Mcp23
- Ofw Mcp15
- Redfin Mcp3
- Zola Mcp3
- Infinitecampus Mcp5
- Resy Mcp2
- Creditkarma Mcp1
- Gogcli Mcp Docs1
- Gogcli Mcp Sheets1