splitwise-mcp 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "splitwise-mcp",
4
+ "owner": {
5
+ "name": "Chris Hall",
6
+ "email": "chris.c.hall@gmail.com"
7
+ },
8
+ "metadata": {
9
+ "description": "MCP server for Splitwise — natural-language expense and group management via the Splitwise API",
10
+ "version": "1.3.0"
11
+ },
12
+ "plugins": [
13
+ {
14
+ "name": "splitwise-mcp",
15
+ "displayName": "Splitwise",
16
+ "source": "./",
17
+ "description": "MCP server for Splitwise — manage expenses, groups, and friends via natural language",
18
+ "version": "1.3.0",
19
+ "author": {
20
+ "name": "Chris Hall"
21
+ },
22
+ "homepage": "https://github.com/chrischall/splitwise-mcp",
23
+ "repository": "https://github.com/chrischall/splitwise-mcp",
24
+ "license": "MIT",
25
+ "keywords": ["splitwise", "expenses", "mcp", "finance"],
26
+ "category": "finance"
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "splitwise-mcp",
3
+ "displayName": "Splitwise",
4
+ "version": "1.3.0",
5
+ "description": "MCP server for Splitwise — natural-language expense and group management via the Splitwise API",
6
+ "author": {
7
+ "name": "Chris Hall",
8
+ "email": "chris.c.hall@gmail.com"
9
+ },
10
+ "homepage": "https://github.com/chrischall/splitwise-mcp",
11
+ "repository": "https://github.com/chrischall/splitwise-mcp",
12
+ "license": "MIT",
13
+ "keywords": ["splitwise", "expenses", "mcp", "finance"],
14
+ "skills": "./SKILL.md",
15
+ "mcp": "./.mcp.json"
16
+ }
package/.mcp.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "splitwise": {
4
+ "command": "node",
5
+ "args": ["${CLAUDE_PLUGIN_ROOT}/dist/index.js"],
6
+ "env": {
7
+ "SPLITWISE_API_KEY": "${SPLITWISE_API_KEY}"
8
+ }
9
+ }
10
+ }
11
+ }
package/SKILL.md ADDED
@@ -0,0 +1,143 @@
1
+ ---
2
+ name: splitwise-mcp
3
+ description: Access Splitwise expense and group data via MCP. Use when the user asks about Splitwise expenses, groups, friends, or balances, or wants to add, edit, or delete expenses. Triggers on phrases like "add that expense to Splitwise", "split this with the vacation group", "make sure Meredith is in that group", "what do I owe", or any request involving shared expenses or group management in Splitwise. Requires splitwise-mcp installed and the splitwise server registered (see Setup below).
4
+ ---
5
+
6
+ # splitwise-mcp
7
+
8
+ MCP server for Splitwise — natural-language expense and group management via the Splitwise API.
9
+
10
+ - **npm:** [npmjs.com/package/splitwise-mcp](https://www.npmjs.com/package/splitwise-mcp)
11
+ - **Source:** [github.com/chrischall/splitwise-mcp](https://github.com/chrischall/splitwise-mcp)
12
+
13
+ ## Setup
14
+
15
+ ### Option A — npx (recommended)
16
+
17
+ Add to `.mcp.json` in your project or `~/.claude/mcp.json`:
18
+
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "splitwise": {
23
+ "command": "npx",
24
+ "args": ["-y", "splitwise-mcp"],
25
+ "env": {
26
+ "SPLITWISE_API_KEY": "your-api-key-here"
27
+ }
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ ### Option B — from source
34
+
35
+ ```bash
36
+ git clone https://github.com/chrischall/splitwise-mcp
37
+ cd splitwise-mcp
38
+ npm install && npm run build
39
+ ```
40
+
41
+ Then add to `.mcp.json`:
42
+
43
+ ```json
44
+ {
45
+ "mcpServers": {
46
+ "splitwise": {
47
+ "command": "node",
48
+ "args": ["/path/to/splitwise-mcp/dist/index.js"],
49
+ "env": {
50
+ "SPLITWISE_API_KEY": "your-api-key-here"
51
+ }
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ Or use a `.env` file in the project directory with `SPLITWISE_API_KEY=<value>`.
58
+
59
+ ### Getting your API key
60
+
61
+ 1. Go to [splitwise.com/apps/register](https://secure.splitwise.com/apps/register)
62
+ 2. Register an app (name and description can be anything)
63
+ 3. Copy the **API key** from the app detail page
64
+
65
+ ## Authentication
66
+
67
+ API key auth — no login flow or token rotation. The key is attached to every request as `Authorization: Bearer <key>`.
68
+
69
+ ## Tools
70
+
71
+ ### User
72
+ | Tool | Description |
73
+ |------|-------------|
74
+ | `sw_get_current_user` | Get the authenticated user's profile (`id`, `first_name`, `last_name`, `email`) |
75
+
76
+ ### Groups
77
+ | Tool | Description |
78
+ |------|-------------|
79
+ | `sw_list_groups` | List all groups with `id`, `name`, and `members[]` |
80
+ | `sw_get_group(id)` | Get a single group's details including members and balances |
81
+ | `sw_create_group(name, group_type?, simplify_by_default?)` | Create a new group (`group_type`: `apartment`, `house`, `trip`, `other`) |
82
+ | `sw_add_user_to_group(group_id, user_id?)` | Add a user by `user_id` (preferred) or `first_name` + `last_name` + `email` |
83
+ | `sw_remove_user_from_group(group_id, user_id)` | Remove a user from a group |
84
+
85
+ ### Friends
86
+ | Tool | Description |
87
+ |------|-------------|
88
+ | `sw_list_friends` | List all friends with `id`, `first_name`, `last_name`, `email` |
89
+
90
+ ### Expenses
91
+ | Tool | Description |
92
+ |------|-------------|
93
+ | `sw_list_expenses(group_id?, friend_id?, dated_after?, dated_before?, limit?, offset?)` | List or search expenses |
94
+ | `sw_get_expense(id)` | Get full details of a single expense |
95
+ | `sw_create_expense(group_id, description, cost, split_equally? \| users?)` | Create an expense — equal split or custom per-person split |
96
+ | `sw_update_expense(expense_id, ...)` | Edit an existing expense (custom split requires full `users` array) |
97
+ | `sw_delete_expense(id)` | Soft-delete an expense |
98
+
99
+ ### Utilities
100
+ | Tool | Description |
101
+ |------|-------------|
102
+ | `sw_get_notifications` | Recent activity feed for the current user |
103
+ | `sw_get_categories` | Hierarchical list of expense categories (use `id` as `category_id`) |
104
+ | `sw_get_currencies` | List of supported currency codes |
105
+
106
+ ## Workflows
107
+
108
+ **Add an expense to a group:**
109
+ ```
110
+ sw_list_groups → find group ID for "vacation"
111
+ sw_create_expense(group_id, "Dinner", "80.00", split_equally: true)
112
+ ```
113
+
114
+ **Add someone to a group:**
115
+ ```
116
+ sw_list_friends → find Meredith's user_id
117
+ sw_get_group(id) → check if Meredith is already in members[]
118
+ sw_add_user_to_group(group_id, user_id) → if not
119
+ ```
120
+
121
+ **Custom split (you paid, split 60/40):**
122
+ ```
123
+ sw_get_current_user → your user_id
124
+ sw_list_friends → other person's user_id
125
+ sw_create_expense(group_id, "Hotel", "200.00", users: [
126
+ { user_id: yours, paid_share: "200.00", owed_share: "120.00" },
127
+ { user_id: theirs, paid_share: "0.00", owed_share: "80.00" }
128
+ ])
129
+ ```
130
+
131
+ **Search and edit an expense:**
132
+ ```
133
+ sw_list_expenses(group_id, dated_after: "2026-01-01") → find expense ID
134
+ sw_update_expense(expense_id, description: "Corrected description", cost: "95.00")
135
+ ```
136
+
137
+ ## Notes
138
+
139
+ - `cost` is always a decimal string (e.g. `"25.00"`)
140
+ - `split_equally: true` and `users` array are mutually exclusive
141
+ - For custom split updates, the **full `users` array is required** — the API replaces the entire split
142
+ - `sw_delete_expense` is a soft delete; restoration requires the Splitwise web app
143
+ - API default for `sw_list_expenses` is 20 results when `limit` is omitted